js实现dateformat
JavaScript 实现日期格式化
在 JavaScript 中,Date 对象没有内置的格式化方法,但可以通过多种方式实现日期格式化。以下是几种常见的实现方法:
使用原生方法组合
通过 Date 对象的原生方法(如 getFullYear、getMonth 等)组合实现格式化:

function formatDate(date, format = 'YYYY-MM-DD') {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
const seconds = String(date.getSeconds()).padStart(2, '0');
return format
.replace('YYYY', year)
.replace('MM', month)
.replace('DD', day)
.replace('HH', hours)
.replace('mm', minutes)
.replace('ss', seconds);
}
// 使用示例
const today = new Date();
console.log(formatDate(today)); // 输出如 "2023-11-15"
console.log(formatDate(today, 'YYYY/MM/DD HH:mm:ss')); // 输出如 "2023/11/15 14:30:45"
使用 Intl.DateTimeFormat
Intl.DateTimeFormat 是 JavaScript 内置的国际化 API,可以方便地格式化日期:

function formatDate(date, locale = 'en-US', options = {}) {
return new Intl.DateTimeFormat(locale, options).format(date);
}
// 使用示例
const today = new Date();
console.log(formatDate(today)); // 默认输出如 "11/15/2023"
console.log(formatDate(today, 'en-US', {
year: 'numeric',
month: 'long',
day: 'numeric'
})); // 输出如 "November 15, 2023"
使用第三方库
如果需要更复杂的格式化功能,可以使用第三方库如 date-fns 或 moment.js(后者已不再推荐):
// 使用 date-fns
import { format } from 'date-fns';
const today = new Date();
console.log(format(today, 'yyyy-MM-dd')); // 输出如 "2023-11-15"
console.log(format(today, 'MM/dd/yyyy HH:mm:ss')); // 输出如 "11/15/2023 14:30:45"
自定义格式化函数
如果需要完全自定义的格式化逻辑,可以扩展 Date 原型或编写独立函数:
Date.prototype.format = function(format) {
const map = {
'YYYY': this.getFullYear(),
'MM': String(this.getMonth() + 1).padStart(2, '0'),
'DD': String(this.getDate()).padStart(2, '0'),
'HH': String(this.getHours()).padStart(2, '0'),
'mm': String(this.getMinutes()).padStart(2, '0'),
'ss': String(this.getSeconds()).padStart(2, '0'),
};
return format.replace(/YYYY|MM|DD|HH|mm|ss/g, match => map[match]);
};
// 使用示例
const today = new Date();
console.log(today.format('YYYY-MM-DD')); // 输出如 "2023-11-15"
注意事项
- 月份从 0 开始计数(0 表示一月),因此需要
+1。 - 使用
padStart确保数字位数一致(如1变为01)。 - 国际化场景下优先使用
Intl.DateTimeFormat。 - 避免扩展原生原型(如
Date.prototype),可能与其他库冲突。






