首页 > 解决方案 > 时刻时区 - 无效日期

问题描述

在下面的片段中,解析moment.tz('30 3 14:59', 'w d HH:mm', 'America/Los_Angeles');工作正常,但将 14:59 更改为 15:00 到 23:59 之间的任何时间都会给出Invalid date.

var validTime = moment.tz('30 3 14:59', 'w d HH:mm', 'America/Los_Angeles');
console.log(validTime.format()); // 2018-07-25T14:59:00-07:00


var invalidTime = moment.tz('30 3 15:00', 'w d HH:mm', 'America/Los_Angeles');
console.log(invalidTime.format()); // Invalid date

https://jsfiddle.net/084e2k91/26/

这里有什么问题?

标签: javascriptmomentjs

解决方案


这真的很有趣,因为我也遇到了同样的问题,我认为这是一个错误,moment.js它没有从其他时区转换日期。但是,当您尝试使用时,do一切似乎都很好。所以当我们在 GitHub 上提出这个问题时,我的建议会do暂时使用。

并且与可以在文档do中查看的相同。这意味着两者都在同一天返回,但一个作为另一个作为.dnumberstring

通过更多的实验,我在 18:30 之后在 IST 中发现问题开始了。但原因对我来说真的无法理解。但可能原因是将时区值添加到导致错误的实时。意味着如果我在 IST 中,则00:00 - 5:30与错误发生的时间相同。

所以更新的代码应该如下所示:

var myTime1 = moment.tz('30 3 14:59', 'w d HH:mm', 'America/Los_Angeles');
console.log(myTime1.format());

var myTime = moment.tz('30 3rd 14:59', 'w do HH:mm', 'America/Los_Angeles');
console.log(myTime.format());





//In IST the problem is starting from 18:30
var myTime1 = moment.tz('30 3 19:30', 'w d HH:mm', 'America/Los_Angeles');
console.log(myTime1.format());


var myTime1 = moment.tz('30 3rd 19:30', 'w do HH:mm', 'America/Los_Angeles');
console.log(myTime1.format());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.21/moment-timezone-with-data-2012-2022.min.js"></script>


推荐阅读