月份和年份字符串中的Javascript新日期

时间:2020-01-27 11:26:29

标签: javascript

我遇到了这样一种情况,我得到的字符串仅指示日期的月份和年份,因此需要从中创建一个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。很奇怪!

3 个答案:

答案 0 :(得分:2)

根据specification,“ 2020年2月”不是有效的输入,因此您不应依靠它来工作。

您应该将输入转换为符合规范的输入,然后决定是否需要当地时间或UTC。

处理时间(区域)是JavaScript中最难的事情之一,我强烈建议您不要自己在这里重新发明轮子,因为这很容易弄乱。 诸如momentjs之类的库可以在这里为您提供帮助。

答案 1 :(得分:1)

实际上,您是将February 2020传递给日期Constructor,并且它假定

date为1 February 2020,因此将输出作为其UTC date,可能是先前的

每天取决于您所在的地区

答案 2 :(得分:1)

使用moment.js库,它将为您带来完美的体验。

moment("February 2020").format('L')
"02/01/2020"

enter image description here