如何使用dayjs从ISO日期字符串中获取正确的小时数?
问题原因
你遇到的问题是因为dayjs默认会把带Z后缀的UTC日期字符串转换为本地时区的时间,所以调用hour()返回的是你本地时区对应的小时,而非原UTC时间的8点。另外你代码里有个语法错误:const hour : dayjs(date).hour();里的冒号应该改成等号。
解决方法
要直接获取UTC时间的小时部分,有两种常用方式:
方式一:使用utc()方法解析UTC时间
直接用dayjs.utc()解析日期,这样后续的时间方法都会基于UTC时区返回值:
function getHours(date:string){ const hour = dayjs.utc(date).hour(); console.log(hour); } getHours("2023-05-06T08:00:00Z"); // 输出8
方式二:使用parseZone()保留原时区
如果需要保留日期字符串自带的时区信息(这里是UTC),可以用parseZone()方法,避免转换为本地时区:
function getHours(date:string){ const hour = dayjs(date).parseZone().hour(); console.log(hour); } getHours("2023-05-06T08:00:00Z"); // 输出8
内容的提问来源于stack exchange,提问作者MasterJoe
相关产品推荐
相关产品推荐

