javascript - 在Javascript中更改日期时区?
问题描述
我有一个UTC格式的日期`2020-06-19T03:55:12.000Z。现在我正在转换为美国时区的日期
let syncDate = moment(date, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]')
.subtract(7, 'hours')
.format('YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
这给了我一个比美国日期晚 7 小时的日期。但我想要以下格式的日期
2020-06-18T21:00:24.523-07:00
在这里,如果我们可以看到小时被定义为 -7 那么请指导我们如何实现相同的目标?
解决方案
您无法从日期中提取时区,因为其中没有时区信息。你说“我正在转换为美国时区的日期”但你没有。你只是减少了7个小时。时区仍然是 UTC。
您应该使用moment-timezone
(而不是像@GetSet 所说的那样手动处理事情)。这里的解决方案:
const moment = require('moment');
const tz = require('moment-timezone');
let date = moment('2020-06-19T03:55:12.000Z');
let syncDate = date.tz('America/Los_Angeles')
console.log(syncDate.format());
但是,我建议你使用Day.js
. 代码将是:
const dayjs = require('dayjs');
const utc = require('dayjs/plugin/utc');
dayjs.extend(utc);
const dDate = dayjs('2020-06-19T03:55:12.000Z');
console.log(dDate.utcOffset(-7*60).format()); //2020-06-18T20:55:12-07:00
我moment.js
以前用过。我试Date-fnd
了24小时。最后,我搬到了Day.js。它是新的(从 2018 年底开始),但发展得如此之快(看看这个链接并将持续时间设为 5 年)。它的伟大之处在于“它总是按照它说的去做”。Moment 和 Date-fns 没有。(不总是)。它使用包装器,因此您永远不会直接使用 Date 对象。它解决了困难和问题。它是不可变的,并且总是返回一个新对象,您可以链接函数。Day.js 具有最小的大小 (2kB)。文档很棒,您可以非常快速地启动和运行。(其他库的工作方式更容易理解。)
在这里我不得不说,Dayjs
性能在计算上不如 Moment,但在解析和格式化方面要好得多(尤其是比 Moment)。
我强烈建议你阅读这篇文章:为什么你不应该使用 Moment.js
编辑(1):正如@GetSet 在 OP 的评论中提到的可能需要 Moment.js 中的解决方案,我将其添加到答案中。
编辑(2):添加您无法以 OP 解决方法的方式实现结果的原因。
推荐阅读
- python - 按 2 列分组,计算第三个数值列的分位数
- javascript - 使用 Snowflake 中的存储过程从表中检索两列
- python - PyCharm 中的“需要更多值来解压”警告
- verilog - 使用测试向量文件的 ALU 测试台不工作
- python - Python 脚本有效但抛出错误 - pandas.errors 标记数据,预期 9 个字段看到 10
- mysql - Mysql用比较另一列得到的值更新空值
- sorting - 如何在模板中使用 sortBy
- python - 将频道移动到具有特定名称的类别
- reactjs - 在 React-Redux Web 应用程序上,我可以减少 Ajax 调用时间吗?
- javascript - 为什么 .css() 不适用于条件语句 bool 是真的?