web-dev-qa-db-fra.com

Date-fns | Comment puis-je formater au UTC

Problème

On dirait que lorsque j'utilise la fonction format(), il convertit automatiquement l'heure UTC d'origine en mon fuseau horaire (UTC + 8). J'ai traversé leurs documents pendant des heures et je ne pouvais pas sembler trouver un moyen de faire défaut à l'heure de l'UTC.

import { parseISO, format } from "date-fns";

const time = "2019-10-25T08:10:00Z";

const parsedTime = parseISO(time);
console.log(parsedTime); // 2019-10-25T08:10:00.000Z

const formattedTime = format(parsedTime, "yyyy-MM-dd kk:mm:ss");
console.log(formattedTime); // 2019-10-25 16:10:00 <-- 8 HOURS OFF!!

J'ai essayé d'utiliser le paquet data-fns-tz et utiliser quelque chose comme

format(parsedTime, "yyyy-MM-dd kk:mm:ss", {timeZone: "UTC"});

toujours pas de chance.

S'il vous plaît aider!

Production attendue

2019-10-25 08:10:00

Sortie réelle

2019-10-25 16:10:00

18
Patrick Mao

J'ai eu le même problème. Ce que je fais, c'est supprimer le fuseau horaire de la chaîne ISO puis utiliser ce temps avec date-fns:

let time = "2019-10-25T08:10:00Z".slice(0, -1)

Ce qui précède est un temps avec le fuseau horaire et, car il n'y a pas de fuseau horaire-FNS-FNS suppose le fuseau horaire local, alors quand vous faites:

format(parseISO(time), 'h:mm a')

vous obtenez: 8h1, ou quel que soit le format que vous préférez. Il suffit de faire attention à la chaîne que vous coupez. Si c'est toujours le même format, il devrait fonctionner.

1
Darkisa

essayer

const formatDate = new Date().toISOString().substr(0, 19).replace('T', ' ');
0
rodrigoum