我正在尝试向 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
首先,让我澄清一下我从你的问题中了解到的内容:
myDate
表示您从本地时区 dateString
基准转换的日期,utcDateString
表示您从 myDate
转换为 utc 日期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);
希望这会有所帮助!
享受:)