Moment.js将日期设置为落后1天

时间:2018-05-22 18:05:04

标签: node.js momentjs

我使用2.22.1格式化日期。

当我输入来自日期选择器的日期时,时刻会将日期放回一天。例如,当我尝试按以下方式格式化日期时:

示例1:

const day = new Date(value).getDate();
const month = new Date(value).getMonth();
const fullYear = new Date(value).getFullYear();
console.log('day', day); // 7
console.log('month', month); // 5
console.log('fullYear', fullYear); //2018

格式化功能:

moment.utc(new Date(month + ' ' + day + ' ' + fullYear), 'MM-DD-YYYY').format('DD-MM-YY')

输出:06-05-18

预计:07-05-18

示例2:

输入:2018年5月31日星期四00:00:00 GMT + 0100(GMT夏令时间)

格式化功能:

moment.utc(new Date(value)).format('DD-MM-YY')

输出:30-05-18 预计:31-05-18

2 个答案:

答案 0 :(得分:4)

moment.utc会将输入转换为通用时间 您正在使用基于GMT +1

的输出运行new Date(...)

如果你想到这一点,那就完全有道理了 你的输出是30-05-18,因为它是在前一天晚上11点/ 23点钟。

这实际上是如何运作的:

moment('05-06-2018', 'MM-DD-YYYY').format('DD-MM-YY')
// alternatively this:
moment.utc('05-06-2018', 'MM-DD-YYYY').format('DD-MM-YY')

并输出:"06-05-18"

moment.js存在的原因之一是在你的代码中一起摆脱Date 请阅读关于如何正确使用时刻的documentation

答案 1 :(得分:3)

我刚刚遇到了这个问题,我在“祖鲁时间”(由于字符串末尾有 Z)中找到的一个快速解决方法是在日期变量后添加 .LocaleString()

我发现为了数据一致性,将数据以 UTC 时间存储,然后在向用户显示数据时将其转换为语言环境字符串更容易。

例如,我正在使用:

moment.utc(dateVariable.toLocaleString()).format("MM/DD/YYYY")