javascript - 在 Javascript 中更改日期时区?

标签 javascript node.js date types momentjs

我有一个 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 年底开始),但增长如此之快(take a look at this link 并将持续时间设置为 5 年)。它的伟大之处在于“它总是言出必行”。 Moment 和 Date-fns 则不然。 (不总是)。它使用包装器,因此您永远不会直接使用 Date 对象。它解决困难和问题。它是不可变的,并且总是返回一个新对象,并且您可以链接函数。 Day.js 的大小最小(2kB)。文档非常棒,您可以非常快速地启动和运行。 (其他库的工作方式更容易理解。)

这里我不得不说,Dayjs在计算方面的性能不如Moment,但是在解析和格式化方面却比Moment要好得多。

我强烈建议您阅读这篇文章:Why you shouldn't use Moment.js


编辑(1):正如 @GetSet 在 OP 的评论中提到的,可能需要 Moment.js 中的解决方案,我将其添加到答案中。

编辑(2):添加无法按照OP解决问题的方式实现结果的原因。

关于javascript - 在 Javascript 中更改日期时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62463175/

相关文章:

c# - 获取下周日期 (C#)

javascript - 如何有条件地在 JavaScript 中包含脚本文件?

javascript - 在 Qualtrics 中使用运行时数据实时执行简单的数学运算

javascript - 使用 Socket.io 发送和接收数据

node.js - Nodemailer Gmail 超时

node.js - 多个项目的单个 node_modules 文件夹

javascript - Enyo onbeforeunload 事件

node.js - 在 sequelize 中搜索 (column1 + column2 +column3) <= column4

javascript - JXCore - 错误的区域设置解析(Date.toLocaleString(['de']))

javascript - AngularUI DatePicker - JavaScript - 获取 SQL 日期格式时休息一天