首页 > 编程笔记 > JavaScript笔记 阅读:14

JavaScript Date日期时间类的用法(非常详细)

JavaScript 中处理日期和时间数据时,同样将 1970 年 1 月 1 日 0 点作为基准时点。

JavaScript 代码中可使用 Date 类处理日期和时间数据,包括年、月、日、时、分、秒和毫秒数据。

下面的代码使用了 Date 类的无参数构造函数,用于返回系统当前的日期、时间和时区信息。
<script>
    var now = new Date();
    document.write(now.toString());
    document.write("<br>");
    document.write(now.toLocaleString());
    now = null;
</script>
执行代码会显示当时的系统时间,代码中使用了 Date 对象的 toString() 方法和 toLocaleString() 方法,分别显示了通用格式和本地格式,可以根据下图的内容观察不同的显示内容。
Tue Apr 28 2025 13:34:56 GMT+0800 (中国标准时间)
2025/4/28 下午1:34:56
第一个 document.write() 方法中使用 toString() 方法返回完整的日期和时间信息。其中,GMT 含义为格林尼治标准时间,+0800 为时区中的正八区,也就是北京时间所在的时区。

第二个 document.write() 方法中使用的 toLocaleString() 方法,返回系统当前区域设置中的日期和时间格式。

使用 Date 对象时,除了使用无参数构造函数获取系统当前时间,还可以指定对象中的日期和时间数据,如:
Date(年,月,日,时,分,秒,毫秒)
参数中,除了年、月是必选,其他参数都是可选的,其中,小时使用 24 小时制,取值从 0 到 23。Date() 构造函数还可以使用一个参数,指定的是距离标准时点的毫秒数。

需要注意的是,设置月份的值是从 0 开始的,即 0 表示 1 月,1 表示 2 月,如下面的代码:
<script>
    var d = new Date(2017, 0, 27);
    document.write(d.toLocaleDateString());
</script>
代码执行结果为:
2017/1/27

此外,还可以使用日期字符串创建 Date 对象,常用的格式包括 "月/日/年"、"年/月/日" 等。在这里,可以使用正常的月份值,如下面的代码:
<script>
    var d1 = new Date("2017/1/28");
    document.write(d1.toLocaleDateString());
    document.write("<br>");
    var d2 = new Date("1/29/2017");
    document.write(d2.toLocaleDateString());
</script>
代码执行结果为:
2017/1/28
2017/1/29

下表是 Date 对象中获取和设置日期、时间数据的常用方法:

方法 描述
getFullYear()
setFullYear()
获取和设置四位年份。
getMonth()
setMonth()
获取和设置月份。请注意,月份数据是从 0 开始的。
getDate()
setDate()
获取和设置当前日期是月份中的第几天。
getHours()
setHours()
获取和设置小时数据。
getMinutes()
setMinutes()
获取和设置分钟数据。
getSeconds()
setSeconds()
获取和设置秒。
getMilliseconds()
setMilliseconds()
获取和设置毫秒数。1s 有 1000ms,取值为 0~999。
getDay()
setDay()
获取和设置当前日期是一周中的第几天,其中,周日为 0,周一为 1,周二为 2,以此类推。
getTime()
setTime()
获取或设置距离基准时点(1970 年 1 月 1 日 0 时)的毫秒数。如果是大于 0 的值,则是晚于基准时点的时间,如果是小于 0 的值,则是早于基准时点的时间。

处理不同时区的统一时间时,可以使用一系列含有 UTC(通用时间代码,与 GMT 是一个概念)字样的方法。如 getUTCFullYear() 方法会根据对象中的日期和系统中的区域设置给出 UTC 时间中的年份。前面给出的方法中,除了 getTime() 和 setTime() 方法,其他的方法都有 UTC 版本,可以参考使用。

此外,需要日期和时间的字符串形式时,可以使用如下一些方法:
下面的代码演示了这些方法的应用,请注意,区域设置基于正八区,而 UTC 时间比北京时间晚了 8 个小时:
<script>
    // 元宵节
    var d = new Date(2017, 1, 11, 16, 30, 55, 99);
    document.write(d.toString());
    document.write("<br>");
    document.write(d.toDateString());
    document.write("<br>");
    document.write(d.toTimeString());
    document.write("<br>");
    document.write(d.toLocaleString());
    document.write("<br>");
    document.write(d.toLocaleDateString());
    document.write("<br>");
    document.write(d.toLocaleTimeString());
    document.write("<br>");
    document.write(d.toUTCString());
</script>
代码执行结果为:
Sat Feb 11 2017 16:30:55 GMT+0800 (中国标准时间)
Sat Feb 11 2017
16:30:55 GMT+0800 (中国标准时间)
2017/2/11 下午4:30:55
2017/2/11
下午16:30:55
Sat, 11 Feb 2017 16:30:55 GMT

JavaScript日期与时间的计算

JavaScript 代码中的日期和时间计算,可以结合 Date 对象和毫秒数据进行。

例如,两个 Date 对象相减可以得出两个时间点相距的毫秒数,如下面的代码:
<script>
    var dt1= new Date(2020,11,26,23,45,56,100);
    var dt2= new Date(2020,11,26,23,45,56,950);
    document.write(dt2-dt1);
</script>
执行代码会显示 850,即两个时点之间相距 850ms。如果两个时点相距过大,可以换算成天数,如下面的代码:
<script>
    var msps=1000;
    var msmin=60000;
    var msphour=3600000;
    var msaday=86400000;
    var dt1 = new Date(2019,11,26,23,45,56,100);
    var dt2 = new Date(2020,11,26,23,45,56,950);
    var interval=dt2-dt1;
    document.write(" 相距天数:"+parseInt(interval/msaday));
</script>
执行代码会显示 366,即两个时点相距的完整天数为 366天,如果需要包含小数部分的天数,可以不使用 parseInt() 函数转换计算结果。此外,本例还定义了几个常用数值,即每秒、每分钟、每小时和每天的毫秒数,日期和时间计算时可以直接使用。

下面代码会在指定的时点加上 15 天:
<script>
    var msps=1000;
    var msmin=60000;
    var msphour=3600000;
    var msaday=86400000;
    var dt1= new Date(2020,11,26,23,45,56,100);
    var result=new Date(dt1.getTime()+msaday*15);
    document.write(result.toLocaleString());
</script>
代码执行结果为:
2021/1/10 下午11:45:56
本例中,首先使用 getTime() 获取 Date 对象距离基准时点的毫秒数,然后加上相应的毫秒数,并通过 Date() 构造函数将计算结果重新生成为 Date 对象,最后,通过 toLocaleString() 方法显示计算结果的日期和时间信息。

相关文章