javascript 格式化ISO日期/时间字符串并将其转换为本地时区的日期/时间

nfzehxib  于 2023-02-21  发布在  Java
关注(0)|答案(2)|浏览(329)

我正在使用一个API,该API以2023-02-18T14:54:28.555Z返回时间戳,这是一个ISO字符串。我需要将此值格式化为用户的时区。
我试过这个:dayjs("2023-02-18T14:54:28.555Z").format('YYYY-MM-DD HH:MM:ss A') // => "2023-02-18 20:02:28 PM"
上述输出不正确,并且比+0530 IST时区晚30分钟。
但是当我向JavaScript日期构造函数输入相同的字符串“2023-02- 18 T14:54:28.555Z”时,我可以看到正确的值。new Date("2023-02-18T14:54:28.555Z").toString() // => 'Sat Feb 18 2023 20:24:28 GMT+0530 (India Standard Time)'
如何使用DayJS为我的时区获得正确的格式化值?
尝试将ISO字符串提供给DayJS构造函数,并期望它将其解析为当前时区。但输出值落后30分钟。

mqkwyuun

mqkwyuun1#

可以使用toLocaleString()方法:

const timestamp = "2023-02-18T14:54:28.555Z";
const date = new Date(timestamp);

const options = { timeZone: 'Asia/Kolkata' };
const formattedDate = date.toLocaleString('en-US', options);

console.log(formattedDate);
nnsrf1az

nnsrf1az2#

Date.toString()根据操作系统的本地时间显示日期。如果您需要在操作系统本地时间以外的区域显示时间,则必须使用DayJS时区插件。

const dayjs = require('dayjs');
const utc = require('dayjs/plugin/utc');
const timezone = require('dayjs/plugin/timezone');

const timestamp = '2023-02-18T14:54:28.555Z';

dayjs.extend(utc);
dayjs.extend(timezone);

// Seattle time because my OS is set to America/Los_Angeles time.
const seattleString = Date(timestamp).toString();

const dayjsLocal = dayjs(timestamp);
const dayjsIst = dayjsLocal.tz('Asia/Calcutta');
const istString = dayjsIst.format('YYYY-MM-DDTHH:mm:ss');

console.log(seattleString); // Sun Feb 19 2023 02:43:42 GMT-0800 (Pacific Standard Time)

console.log(istString); // 2023-02-18T20:24:28

相关问题