我使用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
答案 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")