在我的 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/