在下面的代码段中,解析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/
这里有什么问题?
这真的很有趣,因为我也遇到了同样的问题,我认为这是moment.js
中的一个错误,它没有转换其他时区的日期。但当你尝试使用do
时,一切似乎都很好。所以我的建议是,当我们在GitHub中提出这个问题时,暂时使用do
。
do
与d
相同,可以在文档中查看。这意味着两者返回同一天,但一个返回为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>