javascript - Konvertera unix-tidsstämpel till specifik tidszon


Jag har ett tidsstämpel i unix som nedan vilket är i +2:00 tidszon, men jag vill få samma datum men i +0:00 tidszon, med användning av dayjs,

console.log("TIMESTAMP: ", dayjs.unix(timestamp).format());
>  TIMESTAMP:  2021-05-20T13:46:07+02:00

console.log("FIXED TIMESTAMP: ", dayjs.unix(timestamp).tz("Europe/London").format());
>  FIXED TIMESTAMP:  2021-05-20T12:46:07+01:00

Ovan försöker jag göra detta med tz("Europe/London") men, jag vet inte varför, har jag fått datum i tidszonen "+01:00"..., Varför returnerar inte denna funktion mig en ny tidsstämpel konverterad till "+0:00"?

Tack för all hjälp!

Svar #1

import dayjs from 'dayjs'
import customParseFormat from 'dayjs/plugin/customParseFormat.js'
import utc from 'dayjs/plugin/utc.js'
import timezone from 'dayjs/plugin/timezone.js'
dayjs.extend(customParseFormat)
dayjs.extend(utc)
dayjs.extend(timezone)

const datetime = dayjs.unix(1653134400)

console.log(datetime.tz('UTC').format('YYYY-MM-DD HH:mm:ss Z')) // 2022-05-21 12:00:00 +00:00
console.log(
    datetime.tz('America/Los_Angeles').format('YYYY-MM-DD HH:mm:ss Z') // 2022-05-21 05:00:00 -07:00
)
console.log(datetime.tz('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss Z')) // 2022-05-21 20:00:00 +08:00

Svar #2

Du måste inkludera ett par förlängningsbibliotek för att både UTC och tidszonsformatering ska fungera i dayjs. Både UTC- och tidszons-Javascript-filerna krävs. Jag använde version 1.10.7 eftersom det var de mest uppdaterade.

Om du arbetar i en webbläsare, inkludera följande källa. HTML:

<script src="https://unpkg.com/[email /dayjs.min.js"></script>
<script src="https://unpkg.com/[email /plugin/utc.js"></script>
<script src="https://unpkg.com/[email /plugin/timezone.js"></script>

JavaScript :

dayjs.extend(window.dayjs_plugin_utc);
dayjs.extend(window.dayjs_plugin_timezone);

let printFormat = 'hh:mm:ssA';
let nowLocal = dayjs().utc().local().format(printFormat);
console.log(nowLocal);
console.log(dayjs().tz("America/New_York").format(printFormat));
console.log(dayjs().tz("Asia/Tokyo").format(printFormat));

Några anteckningar för ditt försök, 'tz' (tidszon) objektet är inte kopplat till unix()-funktionen, det är direkt knutet till topploggen DayJS-objektet. Exemplet ovan tar lokal tid och skriver ut den i tre olika tidszoner, vardera i formatet hh:mm:ssAM|PM. Unix-funktionen tar en Unix-tidsstämpel och returnerar ett DayJS-objekt.

Här är en JSFiddle med exemplet ovan som körs: https://jsfiddle.net/e4x507p3/2/

Observera, om du använder tillägg i en webbläsare bör detta fungera, det krävs en annan metod om du arbetar i NodeJS: https://day.js.org/docs/en/plugin/loading-into-nodejs