JavaScript 日期和时间

在本教程中,你将学习如何使用 JavaScript 中的日期和时间。

使用日期对象

Date 对象是一个内置的 JavaScript 对象。它允许你通过浏览器访问计算机系统时钟来获取用户的本地时间。Date 对象还提供了几种管理、操作和格式化日期和时间的方法。

创建日期对象

在我们开始使用日期和时间之前,我们需要创建一个 Date 对象。与其他内置对象(如数组或函数)不同,日期没有相应的文字形式:所有日期对象都需要使用 Date 构造函数 Date() 来创建。

在 JavaScript 中创建 Date 对象有四种不同的方法。

new Date() 语法

你可以简单地声明一个新的 Date 对象而不初始化它的值。在这种情况下,日期和时间值将设置为运行脚本的用户设备上的当前日期和时间。

var d = new Date();
document.write(d);

new Date(year, month, ...) 语法

你还可以通过传递以逗号分隔的以下参数来初始化 Date 对象:年、月、日、小时、分钟、秒和毫秒。

年份和月份参数是必需的,其他参数是可选的。

var d = new Date(2018,0,31,14,35,20,50);
document.write(d);

该日期实际上代表 2018 年 1 月 31 日 14:35:20 和 50 毫秒。如果愿意,你可以忽略时间部分并仅指定日期部分。

new Date(dateString) 语法

JavaScript 还允许你通过传递表示日期或日期和时间的字符串来创建 Date 对象,如以下示例所示:

var d = new Date("31 January 2018");
document.write(d);

此日期表示 2018 年 1 月 31 日。你还可以指定 2018 年 1 月 31 日之类的字符串,或任何一些有效的变体,JavaScript 将自动处理该字符串。

new Date(milliseconds) 语法

你还可以通过传递 1970 年 1 月 1 日格林威治标准时间 00:00:00 之后的毫秒数来定义 Date 对象。这一次被称为 UNIX 时代,因为 1970 年是 UNIX 操作系统正式推出的那一年。这是一个例子:

var d = new Date(1517356800000);
document.write(d);

上述日期为 2018 年 1 月 31 日星期三 05:30:00 GMT 0530。

一旦创建了 Date 对象的实例,就可以使用其方法执行各种任务,例如获取日期的不同组件,设置或修改单个日期和时间值等。这些方法将在下面详细介绍部分。

注: JavaScript 提供用于被称为 literals 的快捷方法来创建大多数的原生对象,这样就不必使用 new 操作符,例如 new Object()new Array() 等等。

获取当前日期和时间

要获取当前日期和时间,请创建新的 Date 对象而不传递任何参数。这将创建一个具有当前日期和时间的对象。这是一个例子:

var now = new Date();
alert(now); // Display the current date and time

此示例的输出将类似于此(取决于时区偏移):

Mon Oct 29 2018 19:58:09 GMT+0100 (Central European Standard Time)

创建日期和时间字符串

JavaScript 的日期对象提供了几种方法,诸如 toDateString()toLocaleDateString() 等,以生成不同格式的日期字符串。这是一个例子:

var d = new Date();
alert(d.toDateString()); // Display an abbreviated date string
alert(d.toLocaleDateString()); // Display a localized date string
alert(d.toISOString()); // Display the ISO standardized date string
alert(d.toUTCString()); // Display a date string converted to UTC time
alert(d.toString()); // Display the full date string with local time zone

同样,你可以使用 Date 对象的 toLocaleTimeString()toTimeString() 方法生成时间字符串,如以下示例所示:

var d = new Date();
alert(d.toTimeString()); // Display the time portion of the date
alert(d.toLocaleTimeString()); // Display a localized time string

获取特定的日期和时间组件

一旦有了正确的日期对象,就可以使用许多方法从中提取详细信息,例如月份、日期、小时或分钟值等。以下部分描述了从中提取单个信息的各种方法。日期对象。

获得年、月和日

Date 对象提供了几个方法,如 getFullYear()getMonth()getDay() 等,你可以用它来提取 Date 对象的具体日期组件,如分别年月日、星期几,等等。以下示例演示如何使用以下方法从 Date 对象获取特定日期组件:

var d = new Date();
// Extracting date part
alert(d.getDate()); // Display the day of the month
alert(d.getDay()); // Display the number of days into the week (0-6)
alert(d.getMonth()); // Display the number of months into the year (0-11)
alert(d.getFullYear()); // Display the full year (four digits)

getDay() 方法返回表示星期几(从 0 到 6)的数字,而不是返回诸如星期日或星期一之类的名称,如果它是星期日,则返回 0; 如果是星期一,则该方法返回 1,依此类推。

同样,getMonth() 方法返回月数(从 0 到 11)而不是月份名称。这里 0 表示一年中的第一个月。因此,如果是 1 月,则方法返回 0 而不是 1; 如果是 8 月,则该方法返回 7。

获得小时、分钟、秒和毫秒

类似地,日期对象提供类似的方法 getHours()getMinutes()getSeconds()getTimezoneOffset() 等从日期对象中提取的时间分量。

var d = new Date();
// Extracting time part 
alert(d.getHours()); // Display the number of hours into the day (0-23)
alert(d.getMinutes()); // Display the number of minutes into the hour (0-59)
alert(d.getSeconds()); // Display the seconds into the minute (0-59)
alert(d.getMilliseconds()); // Display the number of milliseconds into second (0-999)
alert(d.getTime()); // Display the number of milliseconds since 1/1/1970
alert(d.getTimezoneOffset()); // Display the time-zone offset (from Greenwich Mean Time) in minutes

getHours() 方法根据 24 小时制返回当天的小时数(从 0 到 23)。所以,当它是午夜时,方法返回 0; 当它是下午 3 点时,它返回 15。

注意: Date 对象还具有获取 UTC 组件的方法,在 get 后面只要加上 UTC 就可以,如 getUTCDate()getUTCHour()getUTCMinutes() 等。

设置日期和时间值

除了检索日期和时间值之外,你还可以使用 JavaScript 设置或修改这些值。这通常用于必须将日期对象的值从一个特定日期或时间更改为另一个特定日期或时间的程序中。让我们看看它是如何工作的。

设置年、月和日期

Date 对象提供的方法,例如 setFullYear()setMonth()setDate() 方法,分别设置 Date 对象的年份、月份、日期。

例如,在下面的示例中,我们使用 setFullYear() 方法在将来两年之前更改存储在变量中的当前日期。

var d = new Date();
d.setFullYear(d.getFullYear() + 2);
alert(d); // Display future date

上面示例的输出将如下所示:

Thu Oct 29 2020 19:58:09 GMT+0100 (Central European Standard Time)

同样,你可以使用 setMonth() 方法设置或修改 Date 对象的月份部分。

var d = new Date(); // Current date and time
d.setMonth(0); // Sets month to 0, January
document.write(d);

setMonth() 方法需要 0 到 11 之间的整数值,如果你将月份的值设置为大于 11,则日期对象的年份值将递增。

换句话说,值为 12 会导致年份值增加 1,月份值设置为 0,如以下示例所示:

var d = new Date(2018, 5, 24); // June 24, 2018
d.setMonth(12); // Sets month to 12, new date will be January 24, 2019
document.write(d);

同样,你可以修改日期对象的日期部分,如下所示:

var d = new Date(2018, 5, 24); // June 24, 2018
d.setDate(15); // Sets date to 15, new date will be June 15, 2018
document.write(d);

setDate() 方法需要 1 到 31 之间的整数值。此外,如果你传递的值大于该月中的天数,则该月将递增。例如:

var d = new Date(2018, 5, 24); // June 24, 2018
d.setDate(36); // Sets day to 36, new date will be July 6, 2018
document.write(d);

设置小时、分钟和秒

设置时间值的方法也很简单。setHours()setMinutes()setSeconds()setMilliseconds() 可以用来分别设置日期对象中的小时、分钟、秒和毫秒部分。

每个方法都将整数值作为参数。小时范围从 0 到 23,分钟和秒的范围从 0 到 59,毫秒范围从 0 到 999。以下是一个示例:

var d = new Date(2018, 5, 24); // June 24, 2018 00:00:00
d.setHours(8);
d.setMinutes(30);
d.setSeconds(45);
d.setMilliseconds(600);
document.write(d);

上面示例的输出类似于以下内容:

Sun Jun 24 2018 08:30:45 GMT+0200 (Central European Summer Time)