JavaScript中将YYYYMMDD转换为日期的三种方法
作者:BillKu
这篇文章主要介绍了JavaScript中将YYYYMMDD字符串转换为日期对象的三种方法:手动拆分、正则表达式及ISO8601格式(推荐),需注意月份从0开始,时区处理差异,建议验证有效性,优先使用ISO格式以确保标准兼容性,需要的朋友可以参考下
在 JavaScript 中,将 "20250806"(格式为 YYYYMMDD)转换为日期对象,可以通过以下步骤实现:
方法 1:手动拆分字符串
const dateStr = "20250806"; // 拆分字符串获取年、月、日(注意:月份从 0 开始计数) const year = parseInt(dateStr.substring(0, 4)); const month = parseInt(dateStr.substring(4, 6)) - 1; // 月份减 1 const day = parseInt(dateStr.substring(6, 8)); // 创建 Date 对象 const date = new Date(year, month, day); console.log(date); // 输出: Wed Aug 06 2025 00:00:00 GMT+0800 (中国标准时间)
方法 2:使用正则表达式
const dateStr = "20250806";
// 正则匹配提取年、月、日
const [, year, month, day] = dateStr.match(/^(\d{4})(\d{2})(\d{2})$/);
// 创建 Date 对象(月份需减 1)
const date = new Date(year, month - 1, day);
console.log(date); // 同上方法 3:使用 ISO 8601 格式(推荐)
const dateStr = "20250806";
// 转换为 YYYY-MM-DD 格式(ISO 8601)
const isoStr = `${dateStr.slice(0, 4)}-${dateStr.slice(4, 6)}-${dateStr.slice(6, 8)}`;
// 直接通过字符串创建 Date 对象
const date = new Date(isoStr);
console.log(date); // 同上(注意时区差异可能影响输出)关键说明:
月份从 0 开始
JavaScript 的 Date 构造函数中,月份是 0(1月)到 11(12月),所以需要将原始字符串中的月份减 1。
时区问题
const utcDate = new Date(Date.UTC(year, month, day));
方法 1 和 2 创建的日期基于 本地时区(如 GMT+0800)。
方法 3(ISO 格式)创建的日期可能被解析为 UTC 时间,再转换为本地时区(不同浏览器可能有差异)。
如果需要 UTC 时间,请用:
验证有效性
建议检查生成的日期是否有效:
if (isNaN(date.getTime())) {
console.error("无效日期");
}最终选择:
推荐方法 3(ISO 8601 格式),代码简洁且符合标准。
如果需兼容旧浏览器,可选方法 1(手动拆分)。
export const formatDate = (date: string | Date | number, format = "YYYY-MM-DD HH:mm:ss") => {
let resultTime = "";
try {
// 支持 ISO 8601 格式,日期格式为 YYYYMMDD,如:20250806
if ((typeof date === "string" && date.length === 8) || (typeof date === "number" && date.toString().length === 8)) {
if (typeof date === "number") {
date = date.toString();
}
date = `${date.slice(0, 4)}-${date.slice(4, 6)}-${date.slice(6, 8)}`;
}
resultTime = dayjs(date).format(format);
} catch (error) {}
// 处理无效日期
return resultTime === "Invalid Date" ? "" : resultTime;
};到此这篇关于JavaScript中将YYYYMMDD转换为日期的三种方法的文章就介绍到这了,更多相关JavaScript YYYYMMDD转日期内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
