2 回答

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個(gè)贊
我會(huì)考慮使用Date.toLocaleString()進(jìn)行日期/時(shí)間轉(zhuǎn)換。
現(xiàn)在 Moment.js 如果你可以使用它會(huì)更好,但你可以像下面這樣轉(zhuǎn)換時(shí)間。
請(qǐng)記住,您必須考慮 DST 更改,而使用您自己的代碼很難解釋這些更改(DST 切換的確切日期每年都在變化)。
例如,柏林從 10 月下旬到 3 月下旬使用 CET (UTC+1),從 3 月下旬到 10 月下旬使用 CEST (UTC+2)。
為什么我使用“sv”的語言環(huán)境,這是因?yàn)樗举|(zhì)上會(huì)給我們一個(gè) ISO 8601 時(shí)間戳。當(dāng)然,要轉(zhuǎn)換為文本,您可以使用任何語言環(huán)境。
我添加了一個(gè) getUTCOffsetMinutes 函數(shù),它將返回給定 UTC 時(shí)間和時(shí)區(qū)的 UTC 偏移量(以分鐘為單位)。
IANA 時(shí)區(qū)列表在這里:時(shí)區(qū)列表
const time = 1559347200000; // 2019-06-01T00:00:00Z
console.log("UTC time 1:", new Date(time).toISOString());
console.log("Berlin time 1 (ISO):", new Date(time).toLocaleString("sv", { timeZone: "Europe/Berlin"}));
console.log("Berlin time 1 (de):", new Date(time).toLocaleString("de", { timeZone: "Europe/Berlin"}));
const time2 = 1575158400000; // 2019-12-01T00:00:00Z
console.log("UTC time 2:", new Date(time2).toISOString());
console.log("Berlin time 2 (ISO):", new Date(time2).toLocaleString("sv", { timeZone: "Europe/Berlin"}));
console.log("Berlin time 2 (de):", new Date(time2).toLocaleString("de", { timeZone: "Europe/Berlin"}));
// You can also get the UTC offset using a simple enough function:
// Again, this will take into account DST
function getUTCOffsetMinutes(unixDate, tz) {
const localTimeISO = new Date(unixDate).toLocaleString("sv", {timeZone: tz}).replace(" ", "T") + "Z";
return (new Date(localTimeISO).getTime() - unixDate) / 60000; // Milliseconds to minutes.
}
console.log("UTC offset minutes (June/Berlin):", getUTCOffsetMinutes(time, "Europe/Berlin"));
console.log("UTC offset minutes (June/LA):", getUTCOffsetMinutes(time, "America/Los_Angeles"));
console.log("UTC offset minutes (June/Sydney):",getUTCOffsetMinutes(time, "Australia/Sydney"));
console.log("UTC offset minutes (December/Berlin):", getUTCOffsetMinutes(time2, "Europe/Berlin"));
console.log("UTC offset minutes (December/LA):", getUTCOffsetMinutes(time2, "America/Los_Angeles"));
console.log("UTC offset minutes (December/Sydney):", getUTCOffsetMinutes(time2, "Australia/Sydney"));

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊
我使用我制作的這個(gè)功能,我認(rèn)為它可以幫助你:
function formatDateToOffset(date, timeOffset){
var dateInfo, timeInfo;
// change date's hours based on offset
date.setHours(date.getHours() + (timeOffset || 0))
// place it the way you want to format
dateInfo = [date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()]
timeInfo = [date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()];
// return the string formatted date
return dateInfo.join("-") + " " + timeInfo.join(":");
}
console.log(formatDateToOffset(new Date(), 1))
添加回答
舉報(bào)