ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – 用moment()更新时间偏移量.utcOffset()

2019-10-05 19:35:03  阅读:687  来源: 互联网

标签:javascript momentjs time express utc


我正试图使用​​moment.js来处理时间偏移.

我在隐藏的输入中收集本地用户时间偏移量:

<script type="text/javascript">
  $(document).ready(function () { 
    $('input#timeoffset').val(moment().utcOffset()); 
  });
</script>

偏移量得到正确存储(在我的情况下,其值为-240).稍后在服务器端(在utc时间运行)我尝试更新一些db存储的utcDate做类似的事情:

var userDate = moment(utcDate).utcOffset(offset)

我的问题如下:
如果我按上述方式运行我的代码,我就没有效果:

> utcDate:20151001 012421 0000
> userDate:20151001 012421 0000

如果我翻转偏移标志,我得到:

> utcDate:20151001 012421 0000
> userDate:20151001 052421 0400

我显然做错了(即使我的期望是第一个版本是正确的),你有任何暗示吗?

在客户端,我在服务器端使用moment.js v2.10.6 moment-timezone.js v0.4.0和moment.js v2.10.6

解决方法:

主要问题是您将偏移量作为字符串而不是数字传递.

moment.utc("2015-10-01 01:24:21").utcOffset("-240").format('YYYYMMDD HHmmss ZZ')
// "20151001 012421 +0000"

moment.utc("2015-10-01 01:24:21").utcOffset(-240).format('YYYYMMDD HHmmss ZZ')
// "20150930 212421 -0400"

如果您有以分钟为单位的偏移量,则必须使用数字形式.你总是可以转换它:

moment.utc("2015-10-01 01:24:21").utcOffset(+"-240").format('YYYYMMDD HHmmss ZZ')
// "20150930 212421 -0400"

Moment允许偏移量作为字符串传递,但它希望它们采用ISO8601格式之一:[/ – ] HH:mm或[/ – ] HHmm.

moment.utc("2015-10-01 01:24:21").utcOffset("-04:00").format('YYYYMMDD HHmmss ZZ')
// "20150930 212421 -0400"

另外,请注意我使用moment.utc(…)来解析输入字符串.您刚刚使用了将使用本地时区的时刻(…),除非时区是显式的,或者您传递的是Date对象而不是字符串.它还会将moment对象保留为“本地模式”,因此除非机器的时区实际设置为UTC,否则utcDate输出将是错误的.

最后,不要忘记“时区!=偏移”.您不能假设您获得的偏移对所有日期都有效.如果您需要将日期投影到用户的时区,您必须实际知道时区,例如America / New_York.您可以将这些与moment-timezone插件一起使用.

标签:javascript,momentjs,time,express,utc
来源: https://codeday.me/bug/20191005/1857451.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有