javascript - 时刻时区将UTC更改为默认时区
问题描述
语境:
我需要将来自 UTC 的日期时间解析为当前由 moment-timezone 设置为默认值的时区moment.tz.setDefault
。
尝试(功能):
const task = {
startDate: '2020-03-24 14:00:00'
};
const startDateMoment = moment.utc(task.startDate).tz(moment().tz());
但是,每次需要设置时区时,我都会创建一个新的时刻对象。有没有更高效的方式在 utc 到默认时区之间进行转换,或者从时刻获取默认时区?
moment.tz.guess()
从浏览器猜测时区,而不是手动设置的时区。
console.log(`default timezone: "${moment().tz()}", guessed timezone: "${moment.tz.guess()}"`);
返回
default timezone: "US/Samoa", guessed timezone: "America/Vancouver"
解决方案
经过一番挖掘,我确实找到了以下未记录的、自行承担风险使用、随时可能消失的属性:
moment.defaultZone.name
moment.defaultZone
是一个Zone Object,我们真的只关心它的name
属性。
请注意,如果您尚未设置默认值,则它为 null!在下面的代码中,我利用了几个新的 JavaScript 特性、可选链和nullish 合并运算符来查看是否设置了默认区域,如果没有,则使用该moment.tz.guess()
值。
const task = {
startDate: '2020-03-24 14:00:00'
};
console.log('before setting default: ', moment.defaultZone);
moment.tz.setDefault('US/Samoa');
console.log('after setting default: ', moment.defaultZone);
const startDateMoment = moment.utc(task.startDate).tz(moment.defaultZone?.name ?? moment.tz.guess());
console.log(startDateMoment.format());
<script src="https://momentjs.com/downloads/moment.min.js"></script>
<script src="https://momentjs.com/downloads/moment-timezone-with-data.min.js"></script>
推荐阅读
- shell - vscode安装可选任务
- salesforce - 在潜在客户对象上填充地址字段
- python - GTK - Python Treeview 以编程方式选择一行
- javascript - Ramda concat 数组问题
- html - 选择器 .wrapper 不起作用,无法在 CSS 中的浏览器上换行文本
- sql - 从 SQL 客户端移动到 excel 时出现 SQL Cast Error ODBC
- javascript - 在颜色模型之间转换
- sql - 如何在同一张表上链接字段时选择一条记录
- docker - docker 运行并退出 (253)
- python - 如何批量修改pre_close