Date 对象
JavaScript 没有日期数据类型。然而,你可以使用 Date
对象及其方法在你的应用程序中处理日期和时间。Date
对象有大量用于设置、获取和操作日期的方法。它没有任何属性。
JavaScript 处理日期的方式与 Java 类似。这两种语言有许多相同的日期方法,并且都将日期存储为自 UTC 1970 年 1 月 1 日午夜开始以来的毫秒数,而 Unix 时间戳是自同一时刻以来的秒数。UTC 1970 年 1 月 1 日午夜的时刻被称为 epoch。
Date
对象的范围是相对于 epoch 的 -100,000,000 天到 100,000,000 天。
创建 Date
对象
const dateObjectName = new Date([parameters]);
其中 dateObjectName
是正在创建的 Date
对象的名称;它可以是一个新对象或现有对象的属性。
在没有 new
关键字的情况下调用 Date
会返回一个表示当前日期和时间的字符串。
上述语法中的 parameters
可以是以下任何一种
- 无:创建今天的日期和时间。例如,
today = new Date();
。 - 表示日期的字符串,有多种不同形式。支持的具体形式因引擎而异,但始终支持以下形式:
YYYY-MM-DDTHH:mm:ss.sssZ
。例如,xmas95 = new Date("1995-12-25")
。如果你省略小时、分钟或秒,它们的值将设置为零。 - 一组表示年、月、日的整数值。例如,
xmas95 = new Date(1995, 11, 25)
。 - 一组表示年、月、日、小时、分钟和秒的整数值。例如,
xmas95 = new Date(1995, 11, 25, 9, 30, 0);
。
Date 对象的方法
Date
对象用于处理日期和时间的方法大致分为以下几类
- “set”方法,用于设置
Date
对象中的日期和时间值。 - “get”方法,用于从
Date
对象中获取日期和时间值。 - “to”方法,用于从
Date
对象返回字符串值。 - parse 和 UTC 方法,用于解析
Date
字符串。
使用“get”和“set”方法,你可以分别获取和设置秒、分钟、小时、月份中的日期、星期几、月份和年份。有一个 getDay
方法返回星期几,但没有相应的 setDay
方法,因为星期几是自动设置的。这些方法使用整数表示这些值,如下所示
- 秒和分钟:0 到 59
- 小时:0 到 23
- 星期:0(星期日)到 6(星期六)
- 日期:1 到 31(月份中的日期)
- 月份:0(一月)到 11(十二月)
- 年份:自 1900 年以来的年份
例如,假设你定义以下日期
const xmas95 = new Date("1995-12-25");
那么 xmas95.getMonth()
返回 11,而 xmas95.getFullYear()
返回 1995。
getTime
和 setTime
方法对于比较日期很有用。getTime
方法返回自 epoch 以来 Date
对象的毫秒数。
例如,以下代码显示当前年份剩余的天数
const today = new Date();
const endYear = new Date(1995, 11, 31, 23, 59, 59, 999); // Set day and month
endYear.setFullYear(today.getFullYear()); // Set year to this year
const msPerDay = 24 * 60 * 60 * 1000; // Number of milliseconds per day
let daysLeft = (endYear.getTime() - today.getTime()) / msPerDay;
daysLeft = Math.round(daysLeft); // Returns days left in the year
此示例创建了一个名为 today
的 Date
对象,其中包含今天的日期。然后它创建了一个名为 endYear
的 Date
对象,并将其年份设置为当前年份。然后,使用每天的毫秒数,它使用 getTime
计算 today
和 endYear
之间的天数,并四舍五入到整数天数。
parse
方法对于将日期字符串中的值分配给现有 Date
对象很有用。例如,以下代码使用 parse
和 setTime
将日期值分配给 ipoDate
对象
const ipoDate = new Date();
ipoDate.setTime(Date.parse("Aug 9, 1995"));
示例
在以下示例中,函数 JSClock()
以数字时钟的格式返回时间。
function JSClock() {
const time = new Date();
const hour = time.getHours();
const minute = time.getMinutes();
const second = time.getSeconds();
let temp = String(hour % 12);
if (temp === "0") {
temp = "12";
}
temp += (minute < 10 ? ":0" : ":") + minute;
temp += (second < 10 ? ":0" : ":") + second;
temp += hour >= 12 ? " P.M." : " A.M.";
return temp;
}
JSClock
函数首先创建一个名为 time
的新 Date
对象;由于没有给出参数,time
是用当前日期和时间创建的。然后调用 getHours
、getMinutes
和 getSeconds
方法将当前小时、分钟和秒的值分配给 hour
、minute
和 second
。
以下语句根据时间构建一个字符串值。第一个语句创建变量 temp
。它的值是 hour % 12
,即 12 小时制中的 hour
。然后,如果小时是 0
,它会被重新赋值为 12
,以便午夜和中午显示为 12:00
而不是 0:00
。
下一个语句将 minute
值附加到 temp
。如果 minute
的值小于 10,则条件表达式会添加一个带前导零的字符串;否则,它会添加一个带分隔冒号的字符串。然后,一个语句以相同的方式将秒值附加到 temp
。
最后,如果 hour
是 12 或更大,则条件表达式将“P.M.”附加到 temp
;否则,它将“A.M.”附加到 temp
。