获取不依赖于客户端浏览器的语言环境时间

时间:2020-11-05 05:19:49

标签: javascript

我想从不依赖于本地浏览器的ISO格式中获取语言环境时间。 例如,尽管浏览器在其他时区(例如,在美国)中打开,但我想在ko-KR上获得日期。

我拥有的ISO字符串是2020-10-22T00:00:00.000Z,如果我使用new Date就像这样

new Date('2020-10-22T00:00:00.000Z');

它返回日期2020-10-21 16:00:00 GMT-0800。 但是我想像2020-10-22 09:00:00 GMT+0900这样在韩国约会。

toLocaleString方法返回字符串值。但我希望日期对象具有特定的语言环境。

3 个答案:

答案 0 :(得分:1)

“ toLocaleString方法返回字符串值。但是我希望日期对象具有特定的语言环境。

那是不可能的。时间戳记存储为UTC。仅将其转换为输出。日期对象不会改变。

创建一个JavaScript Date实例,以独立于平台的格式表示一个时刻。日期对象包含一个数字,表示自1970年1月1日UTC以来的毫秒数。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date

答案 1 :(得分:0)

您可以使用moment-timezone来获取特定时区的时间。

let date= moment()

let dateAsPerTimeZone = moment.tz(date,'Asia/Seoul');

console.log(dateAsPerTimeZone.format());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data-2012-2022.min.js"></script>

答案 2 :(得分:0)

因此,我创建了一个函数来处理此问题。关键是getTimezoneOffset。以下是我的代码,根据您的需要,返回值和函数过程可以有所不同。

const ko_offset = -540 * 60 * 1000; // it is the Asia/Seoul time zone offset in milliseconds

/**
 * Input : any locale date object
 * Output : translated input date object to Asia/Seoul timezone date object
*/
const toKoreaTime = date => {
  const d = typeof date === 'string' ? new Date(date) : date;
  let kd;
  if (d.getTimezoneOffset() === ko_offset) {
    kd = d;
  } else {
    kd = new Date(d.getTime() + (d.getTimezoneOffset() * 60 * 1000) - ko_offset);
  }
  const Y = kd.getFullYear(), M = kd.getMonth() + 1, D = kd.getDate(), h = kd.getHours(), m = kd.getMinutes(), s = kd.getSeconds();

  return { Y, M, D, h, m, s };
};

它可用于获取任何时区日期的特定时区日期时间。例如,如果我想知道在美国的韩国日期时间

const usDate = new Date(); // I'm use it in the US. (UTC -8)
const koDate = toKoreaTime(usDate); // return Korea date and time. (UTC +9)