使用以下代码:
console.log(moment().toJSON());
moment.tz.setDefault("Europe/Brussels");
console.log(moment().toJSON());
我得到以下结果:
2019-05-12T10:39:12.851Z
2019-05-12T10:39:12.863Z
但是,当我阅读moment-timezone的文档时,setDefault
应该将我的默认时区设置为“欧洲/布鲁塞尔”,因此输出应为:
2019-05-12T10:39:12.851Z
2019-05-12T11:39:12.863Z
显然,setDefault
不能满足我的需求(它正在生成新日期,就像我在指定时区一样),那么这样做的最佳选择是什么?
答案 0 :(得分:2)
setDefault
可以正常工作,问题在于您显示时刻实例值的方式。 toJSON()
显示UTC时间(另请参见toISOString()
: .toISOString()
返回UTC时间戳):
将对象序列化为JSON时,如果存在
Moment
对象,则该对象将表示为ISO8601字符串,已调整为UTC。相反,如果您希望使用ISO8601字符串来反映当前时刻的
utcOffset()
,则可以像这样修改toJSON
函数:moment.fn.toJSON = function() { return this.format(); }
因此,您可以使用format()
代替,这里是一个实时示例:
console.log(moment().toJSON());
console.log(moment().format());
moment.tz.setDefault("Europe/Brussels");
console.log(moment().toJSON());
console.log(moment().format());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data-2012-2022.min.js"></script>
答案 1 :(得分:0)
这可能是由于加载了没有时区数据的moment-timezone引起的。
尝试加载moment-timezone-with-data-10-year-range.js
而不是moment-timezone.js
(如果这就是您要加载的内容)。
文档中有关于which build to use的更多信息。