如何将toLocaleString生成的英格式日期字符串转回new Date对象?
解决将
DD/MM/YYYY HH:mm:ss格式字符串转回Date对象的问题 直接调用new Date(localDate)失败的核心原因是:浏览器对非ISO标准的日期字符串解析规则不统一,DD/MM/YYYY格式会被部分浏览器误判为MM/DD/YYYY(美式日期格式),导致日期逻辑错误或返回无效日期。以下是两种可靠的解决方法:
方法一:手动拆分解析(兼容性最优)
通过拆分字符串提取日、月、年、时、分、秒的数值,直接传入Date构造函数(注意月份是0索引,需减1):
const localDate = "18/03/2023 08:45:47"; // 拆分日期与时间部分 const [dateSegment, timeSegment] = localDate.split(" "); // 提取日、月、年并转换为数字 const [day, month, year] = dateSegment.split("/").map(Number); // 提取时、分、秒并转换为数字 const [hours, minutes, seconds] = timeSegment.split(":").map(Number); // 构造Date对象(月份需减1,因为Date的月份是0-11) const restoredDate = new Date(year, month - 1, day, hours, minutes, seconds);
方法二:转换为ISO标准格式(代码更简洁)
将DD/MM/YYYY HH:mm:ss重构为浏览器普遍支持的YYYY-MM-DDTHH:mm:ss格式,再传入Date构造函数:
const localDate = "18/03/2023 08:45:47"; // 正则替换为ISO兼容格式 const isoFormatted = localDate.replace(/(\d{2})\/(\d{2})\/(\d{4}) (\d{2}:\d{2}:\d{2})/, "$3-$2-$1T$4"); const restoredDate = new Date(isoFormatted);
内容的提问来源于stack exchange,提问作者Atal Shrivastava
相关产品推荐
相关产品推荐

