7

最近遇到的一个需求

 1 year ago
source link: https://www.v2ex.com/t/915110
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  问与答

最近遇到的一个需求

  jvee · 2 小时 41 分钟前 · 526 次点击

判断两个日期是否在同一个半年: 比如:2023-01-03 和 2023-06-30 true 2023-06-30 和 2023-07-01 false 各位彦祖们有没有比较优雅的算法

jmc891205

jmc891205      2 小时 25 分钟前

return (Y1 == Y2) && ((M1<=6 && M2<=6) || (M1>=7 && M2 >=7))
这样就可以吧
dethan

dethan      2 小时 23 分钟前 via Android

不太优雅的:a 和 b 为月份,上半年 Math.max(a, b)<=6 ,下半年 Math.min(a, b)>6
bojackhorseman

bojackhorseman      2 小时 22 分钟前 via iPhone

先判断是不是同一年,再判断是否同时小于等于 6.30 或同时大于 6.30
qeqv

qeqv      2 小时 21 分钟前

这还需要算法吗,按照你的描述,只要年份一样,月份分为两个区间不就算出来了?
christin

christin      2 小时 19 分钟前 via iPhone   ❤️ 1

想减看月份是不是大于 6 不就行了……
mk3s

mk3s      2 小时 16 分钟前

@christin 嗨呀,给你点个赞,好思路,再补充一下,大于等于且同一年
zhaoxin

zhaoxin      2 小时 3 分钟前

@mk3s 你俩在搞笑吧。到底有没有看原博啊。这个半年指的是上半年和下半年。不是你俩以为的时长小于六个月。

算法应该是先比较年,如果年不同,则否。否则看月份,如果两个都在 1-6 月或两个都在 7-12 月,则是;否则则否。所以 1 楼的就是正确答案。
ETiV

ETiV      1 小时 58 分钟前

转成数字处理,(年度相同)且 [(月份数字-1 )/6] 的整数部分相同

let sameSemiYear = (ymd1, ymd2) => {
let ym1 = parseInt(ymd1.replace(/-\d+$/, '').replace('-','')), ym2 = parseInt(ymd2.replace(/-\d+$/, '').replace('-',''))
return Math.floor(ym1/100) === Math.floor(ym2/100) && Math.floor((ym1-1)%100/6) === Math.floor((ym2-1)%100/6)
}

sameSemiYear('2023-01-03', '2023-06-30') // true
sameSemiYear('2023-06-30', '2023-07-01') // false
ershierdu

ershierdu      1 小时 12 分钟前

优雅的没有,但我有一个足够不优雅的 ( doge
P.S.,纯属开玩笑,代码没有经过测试

return ((y1 * 16 + m1 + 1) ^ (y2 * 16 + m2 + 1)) // 8 == 0
IvanLi127

IvanLi127      23 分钟前 via Android

我没有优雅的算法,但我有优雅的写法。

把楼上的答案封到库里,调用的时候就优雅了

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK