【发布时间】:2015-12-28 22:53:33
【问题描述】:
我在尝试使用 moment.js 处理时间偏移时遇到了一些问题。
我在一个隐藏的输入中收集本地用户时间偏移:
<script type="text/javascript">
$(document).ready(function () {
$('input#timeoffset').val(moment().utcOffset());
});
</script>
偏移量得到正确存储(在我的例子中,它的值为-240)。稍后在服务器端(以 utc 时间运行)我尝试更新一些存储 utcDate 的数据库,执行如下操作:
var userDate = moment(utcDate).utcOffset(offset)
我的问题如下: 如果我按照上述方式运行我的代码,我不会得到任何效果:
utcDate: 20151001 012421 +0000userDate: 20151001 012421 +0000
如果我翻转偏移符号,我会得到:
utcDate: 20151001 012421 +0000userDate: 20151001 052421 +0400
我显然做错了什么(即使我的预期是第一个版本是正确的),你有什么提示吗?
在客户端我使用 moment.js v2.10.6 而在服务器端 moment-timezone.js v0.4.0 和 moment.js v2.10.6
【问题讨论】:
-
在你应用偏移量之后,你如何处理
userDate?您可能正在调用toDate、valueOf、unix或其他反映即时而不是墙上时间的方法。 -
另外,请记住“时区!= 偏移量”。如果您存储用户的 当前 偏移量,然后将其应用于任意时间点,则很可能是该时间的错误偏移量。时区可以更改夏令时的偏移量,以及其他各种原因。
-
@MattJohnson 实际上我只是
.format(...)打印出结果。我上面报告的结果打印在:console.log('utcDate: ' + moment(utcDate).format('YYYYMMDD HHmmss ZZ')); console.log('userDate: ' + moment(utcDate).utcOffset(offset).format('YYYYMMDD HHmmss ZZ'));。utcDate没有偏移量。
标签: javascript express time momentjs utc