在我的Node.js应用程序中,用户提交日期,时间和时区(单独的表单字段)。使用Moment Timezone,我试图保存调整为无偏移的日期(与时区无关)。
下面的代码有效,但是有更简单/更清晰的方法来实现相同的结果吗?不得不将偏移量乘以-1似乎是hackish:
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
提前致谢!
答案 0 :(得分:3)
您可以使用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>