如何让dayJS接受传入的dateString作为UTC?

问题描述 投票:0回答:1

我正在尝试向 dayJS 传递一个日期/时间字符串并将其转换为纽约时区。我遇到的问题是我传递的日期/时间字符串被解释为东部时间(我的计算机所在的位置),而不是 UTC 时间。

import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';
import timezone from 'dayjs/plugin/timezone';


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


function TestPage() {
var dateString = "7/1/2023 08:04:09 AM";


var myDate = dayjs.utc(dateString);
var utcDateString = myDate.utc().format('MM/DD/YYYY HH:mm:ss');
var formattedString = myDate.tz("America/New_York").format('MM/DD/YYYY HH:mm:ss');  

console.log('utc string', utcDateString)
console.log('formatted string', formattedString)



console.log("====================================");
return (
    <div>
        <h1>{utcDateString}</h1>
        <h1>{formattedString}</h1>
    </div>
);
}

export default TestPage;

此功能正在记录以下内容:

utc string – "07/01/2023 12:04:09" 
formatted string – "07/01/2023 08:04:09"

如您所见,它将字符串转换为 UTC 时间,而不是相反。我期望的结果是 utcDateString 与 dateString 相同,并且 formattedString 为 4:04:09 AM

javascript reactjs date dayjs
1个回答
0
投票

首先,让我澄清一下我从你的问题中了解到的内容:

  1. myDate
    表示您从本地时区
    dateString
    基准转换的日期,
  2. utcDateString
    表示您从
    myDate
    转换为 utc 日期
  3. 的日期
  4. formattedString
    表示从
    myDate
    转换到另一个时区的日期

以下是我根据您遇到的问题得出的结论:

看起来当我们使用

dayjs.utc
函数时预期有一个特定的格式,我不能 100% 确定预期的格式到底是什么,但是如果我们尝试传递我们正在使用的格式(在你的情况下,它会类似
DD/MM/YYYY HH:mm:ss A
),通过传递一个额外的参数,我们可以让dayjs了解更多关于你想要转换成本地时间的日期,
myDate

解决方案

将此行

var myDate = dayjs.utc(dateString); 
替换为:

var inputDateFormat='DD/MM/YYYY HH:mm:ss A';
var myDate = dayjs.utc(dateString,inputDateFormat);

希望这会有所帮助!

享受:)

© www.soinside.com 2019 - 2024. All rights reserved.