javascript - Analysera dateTime-sträng som UTC


Tidszoner är en konstant smärta i varje datumbibliotek jag har provat. Så här är frågan, anta att du har ett UTC-datum och -tid som ges som sträng: 2019-06-25T05:00:00Z. Hur skapar du ett UTC DateTime-objekt av det (jag använder luxon, men svaret kan vara i termer av vilket bibliotek som helst)?

console.info(luxon.DateTime.fromISO('2019-06-25T05:00:00Z').toSQL());
<script src="https://moment.github.io/luxon/global/luxon.min.js"></script>

När jag kör koden ovan får jag:

2019-06-25 09:00:00.000 +04:00 // local timezone

Medan jag behöver:

2019-06-25 05:00:00.000 -00:00 // UTC

Svar #1

Tre alternativ för dig:

1) Luxons dokumentation säger att du kan använda fromISO för att få en DateTime från det. Det tolkar strängen korrekt. Det verkar som att för att få det formaterat på det sätt du vill, måste du tala om att det ska använda zonen UTC, men det är för att det formaterar på utgången:

const {DateTime} = luxon;
console.info(DateTime.fromISO('2019-06-25T05:00:00Z', { zone: "UTC"}).toSQL());
<script src="https://moment.github.io/luxon/global/luxon.min.js"></script>

Du kan också använda setZone("UTC") på resultatet av fromISO.

2) JavaScripts inbyggda Date-objekt kommer att tolka det som UTC (new Date(yourString)), eftersom det är i det format som definieras i specifikationen. Du kan sedan använda UTC-metoderna på det för att få UTC-information (getUTCHours, etc.), eller så kan du använda de lokala datum-/tidsmetoderna på det för att få lokal information (getHours, etc.). Du kan också använda toISOString för att få en UTC-sträng:

console.info(new Date('2019-06-25T05:00:00Z').toISOString());
<script src="https://moment.github.io/luxon/global/luxon.min.js"></script>

3) Moment skulle också gladeligen göra det.

console.info(moment.utc('2019-06-25T05:00:00Z').toISOString());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.26.0/moment.min.js"></script>

Om du behöver +00:00 istället för Z, kan du använda replace på det, eller med Luxon eller Moment erbjuder de fullständiga formateringsalternativ.