从 1 月 31 号开始的一个月之后是哪天

2020-08-30 19:14:04 +08:00
 px920906

2 月 28(29)号还是 3 月 3(2)号?

google 了下好像是支持前者的比较多,但是这样的话,平年 1 月 28~31 四天开始的一个月之后都是 2 月 28 号,那如果一个人在后 3 天购买一个月有效期的产品不是亏了么,实际遇到这种情况会特殊处理吗?

dayjs 的逻辑也是前者

dayjs('2020/01/31').add(1,'month').toDate()
// Sat Feb 29 2020 00:00:00 GMT+0800 (中国标准时间)

如果用原生 js 的 setMonth 直接加一个月的话是后者

var d = new Date('2020/01/31')
d.setMonth(d.getMonth() + 1)
// 1583107200000
d
// Mon Mar 02 2020 08:00:00 GMT+0800 (中国标准时间)

以及各位看看中英文关键字分别得到的搜索结果,emmmm……

5923 次点击
所在节点    程序员
26 条回复
crclz
2020-08-31 09:31:17 +08:00
用 TimeDelta ( TimeSpan )算,然后再给客户补足 24h
passerbytiny
2020-08-31 10:23:14 +08:00
首先,这是现实问题,而不是技术问题——不管是任何逻辑,任何编码语言,代码都能给你实现。

然后现实上其实也没那么复杂,就是一个周期选择的问题——固定天还是自然月。固定天就不用说了,固定 30/31 天为一个周期。自然月的话就看商家的良心(其实跟良心无关就是随便选的)了,1-28 号起始的就不用管了,29-31 号起始的有三种选择:
一,那几天关门大吉;
二,那几天白送,按照下月一号开始计周期(这是我认为的最优解);
三,自动适配,若该月有这一日就是这一日,否则就是月末那一日(例 1:1/31 > 2/28 > 3/31/4/30 > 5/31 )(例 2:1/29 > 2/28 > 3/29 >……> 2/29 >……)

(若发生了 1/31 > 2/28 > 3/28 > 4/28 的情况,那不是第四种,是技术不过关代码有 bug )。
Jinnn
2020-08-31 11:17:03 +08:00
直接给 31 天, 用户开心, 你维护的也舒服
daozhihun
2020-08-31 11:25:22 +08:00
如果是口语,一般是指自然月吧,也就是 2/28
但是如果涉及到付费之类的,同意楼上的看法,直接按 31 天算比较合适
MengiNo
2020-08-31 18:04:03 +08:00
@hanqian 个人认为这个地方是楼主的关键词有误, "1 月 31 号开始一个月" 无论怎么说也不像是一个完整的中文表达,如果不看上下文,单放这么一个截图 虽然答案很奇怪,但是我相信大部分人会觉得 搜索关键词更奇怪。

我用比较白话的表达 "1 月 31 号后一个月是几号" 作为关键词搜索 谷歌直接出的结果是 Wednesday, March 3, 2021 。 下面第一条结果链接是本文,第二条结果是百度知道,第三条之后是知乎 掘金 开源中国等讨论 等代码相关的结果,混合着一些 关于预产期的结果,不知道是不是我登着谷歌账户的缘故。
jousca
2020-09-02 00:37:39 +08:00
@hanqian 我专门用了插件来过滤 google 中文结果里的垃圾站

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/702630

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX