提问者:小点点

moment.js将日期设置为延迟1天


我使用2.22.1设置日期格式。

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

示例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日Thu 00:00:00 GMT+0100(GMT夏令时)

格式化功能:

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

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


共1个答案

匿名用户

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

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

这(如何)实际上会起作用:

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

和输出:“06-05-18”

因为在本例中,非utc版本不需要输入时间。

moment.js存在的原因之一,是要在代码中全部删除date
(请记住,date现在已经有了很大的改进。DateTimeFormat是一个游戏规则的改变者)
请阅读有关如何正确使用momentjs的文档。

编辑:如果您想用它处理400000个日期,我建议您改用regexp.split.exec.slicedate
(我可以这样说,因为我用javascript生成器和服务工作者编写了一个客户端日志解析器,用于统计反作弊分析)
我确实建议您使用这些东西来提高您的知识。