如何将非本地JavaScript日期时区转换为UTC?

时间:2019-05-17 22:42:32

标签: javascript timezone

在javascript中,您可以将本地日期转换为utc,然后从日期字符串或utc字符串创建日期。 内置的intl函数允许您将日期时间转换为时区,但不能转换回utc。所有其他人都在当地时间说,我找不到关于此的任何具体问题。

现在,您可以随时随地执行此操作

var now = moment();
console.log(now.format('YYYY-MM-DD HH:mm:ss'))
console.log(now.utc().format('YYYY-MM-DD HH:mm:ss'))

console.log(now.tz("Australia/Sydney").format('YYYY-MM-DD HH:mm:ss'))
console.log(now.tz("Australia/Sydney").utc().format('YYYY-MM-DD HH:mm:ss'))
console.log(now.tz("Australia/Sydney").tz("Asia/Tokyo").format('YYYY-MM-DD HH:mm:ss'))
console.log(now.tz("Australia/Sydney").tz("Asia/Tokyo").utc().format('YYYY-MM-DD HH:mm:ss'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.25/moment-timezone-with-data.min.js"></script>

utcs将匹配。考虑到日期不在使用js到utc的浏览器中的本地时区中,还有什么其他方法可以转换日期?不需要是普通的js。

1 个答案:

答案 0 :(得分:0)

这是我使用Intl.DateTimeFormat()的javascript本机vanillajs解决方案

基本上,我得到了指定的时区和本地时间之间的差异。我添加该差异,然后设置返回utc。

/**
 * take a date of assumed timezone and convert to utc
 *
 * @param {*} d
 * @param {*} tz
 * @returns
 */
function tzUTC(d, tz) {
  // first calculate tz difference
  var date = new Date();
  var options = {
    year: 'numeric',
    month: 'numeric',
    day: 'numeric',
    hour: 'numeric',
    minute: 'numeric',
    second: 'numeric',
    hour12: false,
    timeZone: tz
  };
  var tzDate = new Intl.DateTimeFormat('en-US', options).format(date)
  var diff = date - new Date(tzDate);
  var minutes = Math.floor((diff / 1000) / 60);
  var localTime = new Date(d);
  localTime.setMinutes(d.getMinutes() + minutes);
  return localTime.toUTCString();
}


var d = new Date("5/18/2019, 07:49:13");
// Fri May 17 2019 17:49:13 GMT-0400 (Eastern Daylight Time)
// utc should be Fri, 17 May 2019 21:49:13 GMT"
// 
console.log("d:" + d)
console.log("tzUTC:" + tzUTC(d, 'Australia/Sydney'))

d = new Date("5/17/2019, 14:53:21");
console.log("d:" + d)

// Fri May 17 2019 17:53:21 GMT-0400 (Eastern Daylight Time)
// utc "Fri, 17 May 2019 21:53:21 GMT"

console.log("tzUTC:" + tzUTC(d, 'America/Los_Angeles'))