无法使用luxon将带时区的日期字符串解析为DateTime对象
解决Luxon无法解析带时区名称的GMT格式字符串问题
你的目标字符串属于浏览器Date.toString()输出的非标准格式,Luxon的fromISO/fromHTTP/fromRFC2822这类标准解析方法不支持带括号时区注释的版本,需要先清理字符串再用指定格式解析。
解决步骤:
- 清理冗余内容:去掉字符串末尾括号内的时区名称注释,仅保留标准GMT偏移部分
- 用
fromFormat指定格式解析:匹配清理后的字符串格式,配合英文locale确保缩写匹配准确
代码示例:
const { DateTime } = require('luxon'); const rawDateStr = "Thu Feb 23 2023 16:00:00 GMT+1300 (New Zealand Daylight Time)"; // 移除末尾括号及内部内容 const cleanedDateStr = rawDateStr.replace(/\s*\(.*\)$/, ''); // 按对应格式解析,指定英文locale避免缩写匹配问题 const parsedDateTime = DateTime.fromFormat(cleanedDateStr, "EEE MMM dd yyyy HH:mm:ss 'GMT'Z", { locale: 'en' }); console.log(parsedDateTime.isValid); // 输出 true console.log(parsedDateTime.toISO()); // 输出 "2023-02-23T03:00:00.000Z"(UTC时间)
格式参数说明:
EEE:匹配缩写星期(如Thu)MMM:匹配缩写月份(如Feb)dd:两位日期(如23)yyyy:四位年份(如2023)HH:mm:ss:24小时制时分秒'GMT':匹配字面量"GMT"Z:匹配时区偏移(如+1300)
内容的提问来源于stack exchange,提问作者UXCODA
相关产品推荐
相关产品推荐

