我遇到了这样一种情况,我得到的字符串仅指示日期的月份和年份,因此需要从中创建一个Date对象。如果我只传递字符串,例如将“ 2020年2月”转换为Date构造函数后,我很奇怪地返回了上个月的日期,即本例中的2020-31-01。因此,我需要始终添加1天以在Date对象中获得正确的月份。
以下是要复制的代码:
var date_str = "February 2020";
var dt = new Date(date_str)
console.log(dt) // Returns : 2020-01-31T23:00:00.000Z (????)
dt.setDate(dt.getDate() + 1);
console.log(dt) // Returns : 2020-02-01T23:00:00.000Z
您知道这种相当奇怪的行为背后的逻辑是什么,还是我在这里错过了什么?
更新
已经接受了第一个答案是相关的,因此解决了主要问题。但是,这只会增加混乱:我所包含的代码片段按照node的描述运行。在Vue.js应用程序中使用完全相同的逻辑返回正确的Date。很奇怪!
答案 0 :(得分:2)
根据specification,“ 2020年2月”不是有效的输入,因此您不应依靠它来工作。
您应该将输入转换为符合规范的输入,然后决定是否需要当地时间或UTC。
处理时间(区域)是JavaScript中最难的事情之一,我强烈建议您不要自己在这里重新发明轮子,因为这很容易弄乱。 诸如momentjs之类的库可以在这里为您提供帮助。
答案 1 :(得分:1)
实际上,您是将February 2020
传递给日期Constructor,并且它假定
date为1 February 2020
,因此将输出作为其UTC date
,可能是先前的
每天取决于您所在的地区
答案 2 :(得分:1)