首页 > 编程笔记 > JavaScript笔记
阅读:14
JavaScript Date日期时间类的用法(非常详细)
在 JavaScript 中处理日期和时间数据时,同样将 1970 年 1 月 1 日 0 点作为基准时点。
JavaScript 代码中可使用 Date 类处理日期和时间数据,包括年、月、日、时、分、秒和毫秒数据。
下面的代码使用了 Date 类的无参数构造函数,用于返回系统当前的日期、时间和时区信息。
第二个 document.write() 方法中使用的 toLocaleString() 方法,返回系统当前区域设置中的日期和时间格式。
使用 Date 对象时,除了使用无参数构造函数获取系统当前时间,还可以指定对象中的日期和时间数据,如:
需要注意的是,设置月份的值是从 0 开始的,即 0 表示 1 月,1 表示 2 月,如下面的代码:
此外,还可以使用日期字符串创建 Date 对象,常用的格式包括 "月/日/年"、"年/月/日" 等。在这里,可以使用正常的月份值,如下面的代码:
下表是 Date 对象中获取和设置日期、时间数据的常用方法:
处理不同时区的统一时间时,可以使用一系列含有 UTC(通用时间代码,与 GMT 是一个概念)字样的方法。如 getUTCFullYear() 方法会根据对象中的日期和系统中的区域设置给出 UTC 时间中的年份。前面给出的方法中,除了 getTime() 和 setTime() 方法,其他的方法都有 UTC 版本,可以参考使用。
此外,需要日期和时间的字符串形式时,可以使用如下一些方法:
下面的代码演示了这些方法的应用,请注意,区域设置基于正八区,而 UTC 时间比北京时间晚了 8 个小时:
例如,两个 Date 对象相减可以得出两个时间点相距的毫秒数,如下面的代码:
下面代码会在指定的时点加上 15 天:
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 版本,可以参考使用。
此外,需要日期和时间的字符串形式时,可以使用如下一些方法:
- toString() 方法;
- toDateString() 方法;
- toTimeString() 方法;
- toLocaleString() 方法;
- toLocaleDateString() 方法;
- toLocaleTimeString() 方法;
- toUTCString() 方法。
下面的代码演示了这些方法的应用,请注意,区域设置基于正八区,而 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() 方法显示计算结果的日期和时间信息。