我正在修复使用 moment.js 2.0.0 和 Angular Material 的 angularjs 应用程序的错误。
当我将日期设置为日期选择器时,日期始终设置为比正确日期晚一天(例如,如果我设置 23/11,则传递到服务器的字符串为 22/11)。
我发现这个问题在 stackoverflow 上已经遇到了很多时间,例如这里 https://stackoverflow.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 天)
最佳答案
原因可能是日期选择器允许用户使用浏览器的本地时间选择日期,然后以 UTC 形式发送该日期。根据浏览器的时区和当前时间,可能会显示好像正在发送不同的日期。
我假设您正在使用 material date picker 。您可以指定从浏览器假定 UTC,然后将日期发送到服务器不会执行从区域设置到 UTC 的任何转换。这可以使用ng-model-options
来完成。
ng-model-options="{timezone: 'utc'}"
关于javascript - 如何使用时刻2.0.0设置时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49405821/