在下面的代码片段中,解析 moment.tz('30 3 14:59', 'w d HH:mm', 'America/Los_Angeles');
工作正常但将 14:59 更改为15:00 到 23:59 之间的任何时间都会给出一个无效日期
。
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/
这里有什么问题?
最佳答案
这真的很有趣,因为我也遇到了同样的问题,我认为这是 moment.js
中的一个错误,它没有从其他时区转换日期。但是当你尝试使用 do
时,一切似乎都很好。所以我的建议是暂时使用 do
,同时我们在 GitHub 中提出这个问题。
而do
与d
是一样的,可以在docs中查看这里.这意味着两者都在同一天返回,但一个作为 number
另一个作为 string
。
我在 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>
关于javascript - 时刻时区 - 无效日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51481035/