首页 > 解决方案 > 使用 Moment.js 将本地日期、时间和时区解析为 UTC 字符串的代码

问题描述

在单独的字段中,我从用户那里收集 DisplayDate、DisplayTime 和 TimeZone。我想把这些放在片刻,并输出 UTC 格式的字符串以保存到一个隐藏字段中,然后发送回服务器。我使用了下面的代码,但它使用本地时区,而不是我输入的选定时区。如何让它观察 selTimeZonesVal?

var startTime = $('#StartTime');
var displayDateVal = $('#DisplayDate').val();
var displayTimeVal = $('#DisplayTime').val();
var selTimeZonesVal = $('#TimeZones').val();

var dtMoment = moment(displayDateVal + ' ' + displayTimeVal).tz(selTimeZonesVal);
var formattedUtc = dtMoment.utc().format('YYYY-MM-DDTHH:mm:ss');
startTime.val(formattedUtc);

标签: momentjsmoment-timezone

解决方案


问题在于日期解析。不知何故,moment 能够解析日期,但如果日期不是 ISO 格式,它会忽略时区。

修复:

var startTime = $('#StartTimeUtc');
var displayDateVal = $('#DisplayDate').val();
var displayTimeVal = $('#DisplayTime').val();
var selTimeZonesVal = $('#TimeZones').val();

// Massage the date so moment can parse it (moment doesn't like mm/dd/yyyy)
var localDT = new Date(displayDateVal + ' ' + displayTimeVal);
var parseDT = moment(localDT).format('YYYY-MM-DDTHH:mm:ss')

var dtMoment = moment.tz(parseDT, selTimeZonesVal);
var formattedUtc = dtMoment.utc().format('YYYY-MM-DDTHH:mm:ss');
startTime.val(formattedUtc);

推荐阅读