如何使用时刻 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 设置时区的主要内容,如果未能解决你的问题,请参考以下文章

使用moment.js解析时如何忽略时区

如何在 Angular 2 应用程序中包含时刻时区

Linux查看设置系统时区

如何在 Flatpickr 中将给定时区设置为默认时区而不是系统时区?

如何使用 windows api 更改时区设置

如何从时区名称中获取时区偏移量