我正在使用时刻时区,因此我可以从选定的时区转换为客户端的时区。
我无法以比这更好的方式实现它:
convertSelectedTimeZoneToClients() {
let timeZoneInfo = {
usersTimeZone: this.$rootScope.mtz.tz.guess(),
utcOffset: this.formData.timeZone.offset,
selectedDateTime: this.toJSONLocal(this.formData.sessionDate) + " " + this.formData.sessionTime
};
let utcTime = this.$rootScope.mtz.utc(timeZoneInfo.selectedDateTime).utcOffset(timeZoneInfo.utcOffset).format("YYYY-MM-DD HH:mm");
let convertedTime = this.$rootScope.mtz.tz(utcTime, timeZoneInfo.usersTimeZone).format("Z");
return convertedTime;
}
所以基本上我使用 usersTimeZone: this.$rootScope.mtz.tz.guess()
,guess() 函数从浏览器中找出时区。
然后,我从日期时间选择器和下拉列表中获取值,并使用 utcOffset 将它们转换为 UTC 值。
最后我想将该 utc 值转换为用户时区值。
我得到这样的对象:
_d表示转换后的正确值。我尝试在 ConvertedTime 变量上添加一堆不同的 .format() 模式,但我无法以这种格式检索时间:“YYYY-MM-DD HH:mm”。我想它的工作方式与使用 .utcOffset() 函数时不同。
有人可以帮我解决这个问题吗?
最佳答案
您无需猜测客户端时区即可转换为本地时间。只需使用local
函数即可。
例如:
moment.tz('2016-01-01 00:00', 'America/New_York').local().format('YYYY-MM-DD HH:mm')
对于位于太平洋时区的用户,此操作会从东部时区转换为太平洋时区,并且您会得到输出字符串 “2015-12-31 21:00”
。对于其他时区的用户,输出会有所不同,正如预期的那样。
您不需要格式化为字符串并重新解析它,也不需要手动操作 UTC 偏移量。这几乎是没有道理的。
关于javascript - 使用 moment.js (时区)时以 ("YYYY-MM-DD HH:mm") 格式返回日期和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40405057/