如何设置时刻2.0.0的时区

时间:2018-03-21 11:59:55

标签: javascript angularjs datepicker angular-material

我修复了一个使用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天)

1 个答案:

答案 0 :(得分:1)

原因可能是日期选择器允许用户使用浏览器的本地时间选择日期,然后将日期发送为UTC。根据浏览器的时区和当前时间,它可能看起来好像发送了不同的日期。

我假设您使用的是material date picker。您可以指定从浏览器中假定UTC,然后将日期发送到服务器将不会从区域设置转换为UTC。这可以使用ng-model-options完成。

ng-model-options="{timezone: 'utc'}"