使用Moment.js将本地日期,时间和时区解析为UTC字符串的代码

时间:2019-03-15 18:41:40

标签: momentjs moment-timezone

在单独的字段中,我从用户收集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);

1 个答案:

答案 0 :(得分:0)

问题在于日期解析。按某种方式,时刻可以解析日期,但是如果日期不是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);