我修复了一个使用moment.js 2.0.0和angular material的angularjs应用程序。
当我将日期设置为我的日期选择器时,日期总是设置在正确日期后一天(例如,如果我设置23/11,则传递给服务器的字符串为22/11)。
我已经看到这个问题在stackoverflow上遇到了大量的时间,例如https://stackoverflow.com/a/9509425/1948785
这似乎是一个时区问题,因为我的网络应用正在使用moment.js 2.0.0,所以我需要知道如何使用此类版本设置时区。
探索时刻。我无法找到一个时刻。方法。
这是我的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>
opensDate由datepicker设置,然后通过这种方式发送:
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 dev工具进行调试,则日期已经错误(-1天)
答案 0 :(得分:1)
原因可能是日期选择器允许用户使用浏览器的本地时间选择日期,然后将日期发送为UTC。根据浏览器的时区和当前时间,它可能看起来好像发送了不同的日期。
我假设您使用的是material date picker。您可以指定从浏览器中假定UTC,然后将日期发送到服务器将不会从区域设置转换为UTC。这可以使用ng-model-options
完成。
ng-model-options="{timezone: 'utc'}"