在JavaScript开发中,将Date
对象转换为特定格式的字符串是高频操作,本文提供6种实用方法,包含代码示例、注意事项和最佳实践,助您实现灵活精准的日期格式化。
toString()
默认返回带时区的完整日期字符串
new Date().toString() // 输出:"Tue Jun 04 2024 15:30:45 GMT+0800 (中国标准时间)"
toISOString()
生成ISO 8601格式字符串(UTC时间)
new Date().toISOString() // 输出:"2024-06-04T07:30:45.123Z"
toLocaleString()
根据本地化设置转换
new Date().toLocaleString('zh-CN') // 输出:"2024/6/4 15:30:45"
function formatDate(date, format = 'yyyy-MM-dd') { const pad = num => num.toString().padStart(2, '0') return format .replace(/yyyy/g, date.getFullYear()) .replace(/MM/g, pad(date.getMonth() + 1)) .replace(/dd/g, pad(date.getDate())) .replace(/HH/g, pad(date.getHours())) .replace(/mm/g, pad(date.getMinutes())) .replace(/ss/g, pad(date.getSeconds())) } // 示例使用 formatDate(new Date(), 'yyyy年MM月dd日 HH:mm') // 输出:"2024年06月04日 15:30"
场景需求 | 推荐方案 | 优势说明 |
---|---|---|
简单快速转换 | 使用内置方法(toISOString 等) |
无需额外代码 |
复杂格式 | 自定义格式化函数 | 灵活可控 |
国际化支持 | Intl.DateTimeFormat对象 | 内置多语言支持 |
处理历史日期 | 第三方库(date-fns/moment) | 兼容性更好 |
时区陷阱
getMonth()
返回0-11(1月-12月)getDay()
返回0-6(周日-周六)兼容性处理
// 旧浏览器兼容写法 const isoString = date.toISOString ? date.toISOString() : `${date.getUTCFullYear()}-${pad(date.getUTCMonth()+1)}-${pad(date.getUTCDate())}T...`;
有效性验证
if (!(date instanceof Date && !isNaN(date))) { throw new Error('无效日期对象') }
Q:如何获取纯日期部分?
new Date().toISOString().split('T')[0] // "2024-06-04"
Q:为什么月份显示少1?
因JavaScript月份从0开始计数,需+1
处理
Q:如何显示为本地时间?
优先使用toLocaleString()
系列方法
(完)