Moment.js将日期设置为晚1天

Tom*_*Tom 4 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
Run Code Online (Sandbox Code Playgroud)

格式化功能:

moment.utc(new Date(month + ' ' + day + ' ' + fullYear), 'MM-DD-YYYY').format('DD-MM-YY')
Run Code Online (Sandbox Code Playgroud)

输出:06-05-18

预期:18/07/05

范例2:

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

格式化功能:

moment.utc(new Date(value)).format('DD-MM-YY')
Run Code Online (Sandbox Code Playgroud)

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

Got*_*ttZ 7

moment.utc将输入转换为通用时间。
您正在运行new Date(...)基于GMT +1的输出

如果您考虑一下,这是完全有意义的。
您的输出是30-05-18,因为它是前一天的11 PM / 23:00。

这实际上将如何工作:

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')
Run Code Online (Sandbox Code Playgroud)

并输出: "06-05-18"

moment.js存在的原因之一是一起删除了Date您的代码。
请只阅读有关如何正确使用力矩的文档


小智 7

我刚刚遇到这个问题,我发现暂时在“祖鲁时间”中处理的一个快速解决方案(由于字符串末尾的 Z)是.LocaleString()在日期变量之后添加。

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

例如,我正在使用:

moment.utc(dateVariable.toLocaleString()).format("MM/DD/YYYY")
Run Code Online (Sandbox Code Playgroud)