在javascript开发中,日期和时间的处理是非常常见的需求,比如获取当前时间、计算两个日期的差值、格式化日期展示等,这些场景都可以通过原生的Date对象来实现。Date对象是javascript内置的日期时间处理构造函数,提供了丰富的属性和方法来操作日期和时间数据。
Date对象的基础创建方式
使用Date对象首先需要创建实例,常见的创建方式有以下几种:
- 无参数创建:获取当前系统的日期和时间
- 传入时间戳创建:时间戳是1970年1月1日00:00:00 UTC到指定时间的毫秒数
- 传入日期字符串创建:支持多种标准日期格式字符串
- 传入年、月、日等参数创建:注意月份是从0开始计数的,0代表1月,11代表12月
下面是不同创建方式的代码示例:
// 无参数创建,获取当前时间
const now = new Date();
console.log(now);
// 传入时间戳创建,时间戳为1698765432100
const dateFromTimestamp = new Date(1698765432100);
console.log(dateFromTimestamp);
// 传入日期字符串创建
const dateFromString = new Date('2024-03-15 14:30:00');
console.log(dateFromString);
// 传入年、月、日等参数创建,注意月份从0开始
// 这里创建的是2024年3月15日 14点30分0秒
const dateFromParams = new Date(2024, 2, 15, 14, 30, 0);
console.log(dateFromParams);
Date对象常用方法分类
Date对象的方法可以分为获取时间相关、设置时间相关、转换格式相关三大类,下面分别介绍常用的核心方法。
获取时间相关方法
这类方法用于获取Date实例中对应的年、月、日、时、分、秒、毫秒等信息,部分方法支持获取UTC时间,方法名带UTC后缀即可。
| 方法名 | 作用说明 |
|---|---|
| getFullYear() | 获取四位数的年份 |
| getMonth() | 获取月份,返回值0-11,0代表1月 |
| getDate() | 获取月份中的第几天,返回值1-31 |
| getDay() | 获取星期几,返回值0-6,0代表星期日 |
| getHours() | 获取小时数,返回值0-23 |
| getMinutes() | 获取分钟数,返回值0-59 |
| getSeconds() | 获取秒数,返回值0-59 |
| getMilliseconds() | 获取毫秒数,返回值0-999 |
| getTime() | 获取时间戳,即1970年1月1日00:00:00 UTC到当前时间的毫秒数 |
下面是获取时间方法的示例代码:
const date = new Date('2024-03-15 14:30:25');
console.log('年份:', date.getFullYear()); // 输出2024
console.log('月份:', date.getMonth() + 1); // 输出3,因为月份从0开始需要加1
console.log('日期:', date.getDate()); // 输出15
console.log('星期:', date.getDay()); // 输出5,代表星期五
console.log('小时:', date.getHours()); // 输出14
console.log('分钟:', date.getMinutes()); // 输出30
console.log('秒数:', date.getSeconds()); // 输出25
console.log('时间戳:', date.getTime()); // 输出对应时间戳
设置时间相关方法
这类方法用于修改Date实例中的时间属性,和获取方法对应,同样支持UTC版本,方法名带UTC后缀即可。
- setFullYear(year, month, day):设置年份,可选设置月份和日期
- setMonth(month, day):设置月份,可选设置日期,月份取值0-11
- setDate(day):设置月份中的第几天
- setHours(hours, minutes, seconds, ms):设置小时,可选设置分、秒、毫秒
- setMinutes(minutes, seconds, ms):设置分钟,可选设置秒、毫秒
- setSeconds(seconds, ms):设置秒数,可选设置毫秒
- setMilliseconds(ms):设置毫秒数
- setTime(timestamp):通过时间戳设置整个日期时间
下面是设置时间方法的示例代码:
const date = new Date();
console.log('修改前的日期:', date);
// 设置年份为2025年
date.setFullYear(2025);
console.log('修改年份后:', date);
// 设置月份为4月,注意传入3(因为0是1月)
date.setMonth(3);
console.log('修改月份后:', date);
// 设置日期为20号
date.setDate(20);
console.log('修改日期后:', date);
// 设置时间为10点30分
date.setHours(10, 30);
console.log('修改时间后:', date);
格式转换相关方法
这类方法用于将Date实例转换为指定格式的字符串,方便展示或者传输。
- toString():返回完整的日期时间字符串,格式由运行环境决定
- toLocaleString():返回本地格式的日期时间字符串,会根据当前环境的语言和地区调整格式
- toLocaleDateString():返回本地格式的日期字符串,不包含时间
- toLocaleTimeString():返回本地格式的时间字符串,不包含日期
- toISOString():返回ISO 8601标准的日期时间字符串,格式为YYYY-MM-DDTHH:mm:ss.sssZ
- toJSON():返回和toISOString()相同的结果,常用于JSON序列化
下面是格式转换方法的示例代码:
const date = new Date('2024-03-15 14:30:25');
console.log('toString结果:', date.toString());
console.log('toLocaleString结果:', date.toLocaleString());
console.log('toLocaleDateString结果:', date.toLocaleDateString());
console.log('toLocaleTimeString结果:', date.toLocaleTimeString());
console.log('toISOString结果:', date.toISOString());
console.log('toJSON结果:', date.toJSON());
常见日期时间处理场景示例
计算两个日期的差值
通过计算两个Date实例的时间戳差值,可以得到两个日期相差的毫秒数,再转换为天、小时等单位即可。
const date1 = new Date('2024-03-01');
const date2 = new Date('2024-03-15');
// 计算毫秒差
const diffMs = date2.getTime() - date1.getTime();
// 转换为天数
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
console.log('两个日期相差:', diffDays, '天'); // 输出14天
自定义日期格式化函数
原生Date对象的格式化方法灵活性不足,我们可以自己实现一个简单的格式化函数,支持自定义格式占位符。
function formatDate(date, formatStr) {
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 formatStr
.replace('YYYY', year)
.replace('MM', month)
.replace('DD', day)
.replace('HH', hours)
.replace('mm', minutes)
.replace('ss', seconds);
}
const now = new Date();
const formatted = formatDate(now, 'YYYY-MM-DD HH:mm:ss');
console.log('格式化后的日期:', formatted); // 输出类似2024-03-15 14:30:25
注意事项
使用Date对象时需要注意几个常见问题:
- 月份是从0开始计数的,获取和设置月份时都需要处理这个偏移,避免出错
- getDay()返回的是星期几,0代表星期日,不是星期一
- 不同浏览器对日期字符串的解析可能存在差异,建议优先使用时间戳或者年、月、日参数创建Date实例
- 处理跨时区问题时,优先使用UTC相关的方法,避免本地时区带来的计算误差
Date对象是javascript处理日期时间的基础工具,掌握上述常用方法可以满足大部分日常开发需求,复杂场景可以结合自定义函数扩展功能。
javascriptDate对象日期处理时间处理修改时间:2026-07-23 02:39:52