我在我的 Angular 项目中使用 MomentJS,并且在不同的日期时区方面遇到了很多问题。
我的应用程序不应该考虑任何时区,但是我的后端 api 和前端之间存在这种混乱,当我将标准时刻对象发送到 c# 后端时,它默认将其转换为 UTC,并且我总是得到日期 -1 天。
我可以将 MomentJS 或 javascript Date 对象设置为始终默认为 UTC 并忽略小时/分钟/秒吗?
当我做:moment()
它会根据时区和当前时间填充今天的值。
我要实现moment()
在我的整个应用程序中始终具有 UTC 值并且时间始终为 00:00:00。
是否也可以通过以下方式实现这一目标new Date()
?
现在我一直在使用.toUTCString()
after new Date()
但我的解决方案中有大量日期变量,并且确保所有内容都有.toUTCString()
一直以来,如果另一个开发人员错过了这一点,就会导致问题。我正在尝试找到一种在项目级别标准化的方法。
我的主要问题是 momentJS 比较方法.isBefore()
, .isSame()
, .isAfter()
。因为我的所有日期都包含不同的小时和不同的时区,所以当比较发生时,它会将它们考虑在内,而不是按照我想要的方式运行。
您可以使用时刻时区 with moment
.
然后设置默认即可UTC
时区,代码如下:
import * as moment from 'moment-timezone';
...
moment.tz.setDefault('Etc/UTC');
Angular 中的一个可能的选择是创建一个单例实例LocaleService
管理本地化相关参数。
import { Injectable } from '@angular/core';
import * as moment from 'moment-timezone';
@Injectable({
providedIn: 'root'
})
export class LocaleService {
constructor() {
this.setDefaultTimezone();
}
setDefaultTimezone() {
moment.tz.setDefault('Etc/UTC');
}
// other stuff related to localization
...setCurrentTimezone()
...setLocale()
}
然后,我们需要通过以下方式提供此服务AppModule
,并且也不要忘记将其注入到全局组件中,例如AppComponent
,以便被实例化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)