如何使用时刻 2.0.0 设置时区
Posted
技术标签:
【中文标题】如何使用时刻 2.0.0 设置时区【英文标题】:How to set the timezone with moment 2.0.0 【发布时间】:2018-08-30 13:01:35 【问题描述】:我正在修复一个使用 moment.js 2.0.0 和 angular 材料的 angularjs 应用程序的错误。
当我将日期设置为我的日期选择器时,日期总是比正确日期晚一天(例如,如果我设置 23/11,传递给服务器的字符串是 22/11)。
我已经看到这个问题已经在 *** 上遇到了很多时间,比如这里 https://***.com/a/9509425/1948785
这似乎是一个时区问题,因为我的网络应用正在使用 moment.js 2.0.0,所以我需要知道如何使用该版本设置时区。
探索 moment.js 我找不到 moment.tz 方法。
这是我的 div:
<md-input-container class="col-xs-6 col-md-3">
<label>Opening date</label>
<md-datepicker ng-disabled="..." name="Openingdate" ng-model="dealer.openingDate" aria-label="Opening date" ng-model-options=" timezone: 'utc' ">
Opening date
<div ng-messages="..." ng-show="...">
<div ng-message="required">...</div>
</div>
</md-datepicker>
</md-input-container>
openingDate 由日期选择器设置,然后以这种方式通过邮寄方式发送:
if(!dealer)
throw new Error('Invalid parameters.');
config_post.url = actions.create_dealer;
config_post.data = ;
config_post.data['dealer'] = dealer;
return $http(config_post);
如果我在调用此帖子之前通过 chrome 开发工具进行调试,则日期已经错误(-1 天)
【问题讨论】:
请添加dealer.openingDate
设置代码和dealer.openingDate
值设置发送代码(即您的控制器和服务代码)。
我添加了这些信息,谢谢
【参考方案1】:
原因可能是日期选择器允许用户使用浏览器的本地时间选择日期,然后将日期作为 UTC 发送。根据浏览器的时区和当前时间,它可能看起来好像正在发送不同的日期。
我假设您使用的是material date picker。您可以指定从浏览器假定 UTC,然后将日期发送到服务器不会执行从区域设置到 UTC 的任何转换。这可以使用ng-model-options
来完成。
ng-model-options="timezone: 'utc'"
【讨论】:
以上是关于如何使用时刻 2.0.0 设置时区的主要内容,如果未能解决你的问题,请参考以下文章