我想从不依赖于本地浏览器的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
方法返回字符串值。但我希望日期对象具有特定的语言环境。
答案 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)