javascript - Moment JS - 将用户提交的日期/时间/时区转换为与时区无关的 UTC

标签 javascript node.js datetime momentjs

在我的 Node.js 应用程序中,用户提交日期、时间和时区(单独的表单字段)。使用 Moment Timezone,我尝试保存调整为无偏移的日期(与时区无关)。

下面的代码可以工作,但是有没有更简单/更干净的方法来实现相同的结果?必须将偏移量乘以 -1 似乎有些骇人听闻:

const userDate = new Date(req.body.date + ' ' + req.body.time);
const userTz = req.body.tz;

const offset = moment.tz(userTz).utcOffset();
const utc = moment(userDate).utcOffset(-1*offset).format('YYYY-MM-DD[T]HH:mm:ss');

输入示例:

Date: 09/06/2016 (via Bootstrap date picker)
Time: 07:41:00 (via Bootstrap time picker)
Timezone: America/New_York (UTC/GMT -4 hours)

返回(正确):

2016-09-06T11:41:00Z

提前致谢!

最佳答案

您可以使用tz在用户输入的时区中创建日期,在 javascript 日期对象中没有直接的方法。使用 moment.tz 重建日期后,继续将其转换为 utc,现在按照您想要的方式格式化它

此外,请在不同时区运行的浏览器中检查您的解决方案(问题中所示),我很确定它会给出不同的结果。

let req = {};
 req.body = {date: "09/06/2016",
             time: "07:41:00",
             tz: "America/New_York"};

const a = moment
           .tz(req.body.date+ " " + req.body.time,"MM/DD/YYYY HH:mm:ss" ,req.body.tz)
           .utc()
           .format();

console.log(a);
<script src="http://momentjs.com/downloads/moment.min.js"></script>
<script src="http://momentjs.com/downloads/moment-timezone-with-data-2010-2020.min.js"></script>

关于javascript - Moment JS - 将用户提交的日期/时间/时区转换为与时区无关的 UTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39838177/

相关文章:

javascript - 从外部调用 webpacked 代码(HTML 脚本标签)

node.js - 有人了解 IBM OpenWhisk 和 Cors 设置吗?

Excel 将秒 dd hh mm ss 转换为更大的值

node.js - 如何等待 promise ?

javascript - 如何以正确的格式将文件写入 mpeg 电影文件到磁盘?

java - 强制 Spring Data MongoDB 将所有日期读取为 Joda DateTime 类型

python - 将字符串拆分为给定大小的组

javascript - 我的 jquery slider 不显示值

JavaScript 在 'each' 循环内外声明函数

javascript - 评论仅适用于第一篇文章