JavaScript 日期和时间

在 JavaScript 中,日期和时间由 Date 对象表示。Date 对象提供日期和时间信息,并提供各种方法。

JavaScript 日期定义了EcmaScript 纪元,它表示自1970 年 1 月 1 日 UTC 以来的毫秒数。这个日期和时间与 UNIX 纪元(计算机记录日期和时间值的普遍基准值)相同。

创建 Date 对象

创建日期对象有四种方法。

  • new Date()
  • new Date(milliseconds)
  • new Date(Date string)
  • new Date(year, month, day, hours, minutes, seconds, milliseconds)

new Date()

您可以使用 new Date() 构造函数创建日期对象。例如,

const timeNow = new Date();
console.log(timeNow); // shows current date and time

输出

Mon Jul 06 2020 12:03:49 GMT+0545 (Nepal Time)

在这里,new Date() 创建一个具有当前日期和本地时间的新日期对象。


new Date(milliseconds)

Date 对象包含一个数字,表示自1970 年 1 月 1 日 UTC 以来的毫秒数。

new Date(milliseconds) 通过将毫秒数添加到零时间来创建新的日期对象。例如,

const time1 = new Date(0);

// epoch time
console.log(time1); // Thu Jan 01 1970 05:30:00

// 100000000000 milliseconds after the epoch time
const time2 = new Date(100000000000)
console.log(time2); // Sat Mar 03 1973 15:16:40

注意:1000 毫秒等于 1 秒。


new Date(date string)

new Date(date string) 从日期字符串创建新的日期对象。

在 JavaScript 中,通常有三种日期输入格式。

ISO 日期格式

您可以通过传递 ISO 日期格式来创建日期对象。例如,

// ISO Date(International Standard)
const date = new Date("2020-07-01");

// the result date will be according to UTC
console.log(date); // Wed Jul 01 2020 05:45:00 GMT+0545

您也可以只传递年份和月份,或者只传递年份。例如,

const date = new Date("2020-07");
console.log(date); // Wed Jul 01 2020 05:45:00 GMT+0545

const date1 = new Date("2020");
console.log(date1); // Wed Jul 01 2020 05:45:00 GMT+0545

您也可以为 ISO 日期传递具体时间。

const date = new Date("2020-07-01T12:00:00Z");
console.log(date); // Wed Jul 01 2020 17:45:00 GMT+0545

注意:日期和时间用大写字母T分隔。UTC 时间用大写Z定义。


短日期和长日期格式

另外两种日期格式是短日期格式长日期格式

// short date format "MM/DD/YYYY"
const date = new Date("03/25/2015");
console.log(date); // Wed Mar 25 2015 00:00:00 GMT+0545

// long date format "MMM DD YYYY"
const date1 = new Date("Jul 1 2020");
console.log(date1); // Wed Jul 01 2020 00:00:00 GMT+0545

// month and day can be in any order
const date2 = new Date("1 Jul 2020");
console.log(date2); // Wed Jul 01 2020 00:00:00 GMT+0545

// month can be full or abbreviated. Also month names are insensitive.
// comma are ignored
const date3 = new Date("July 1 2020");
console.log(date3); // Wed Jul 01 2020 00:00:00 GMT+0545

const date4 = new Date("JULY, 1, 2020");
console.log(date4); // Wed Jul 01 2020 00:00:00

new Date(year, month, day, hours, minutes, seconds, milliseconds)

new Date(year, month,...) 通过传递具体的日期和时间来创建新的日期对象。例如,

const time1 = new Date(2020, 1, 20, 4, 12, 11, 0);
console.log(time1); // Thu Feb 20 2020 04:12:11

传递的参数有特定的顺序。

如果传递四个数字,它们代表年、月、日和小时。例如,

const time1 = new Date(2020, 1, 20, 4);
console.log(time1); // Thu Feb 20 2020 04:00:00

同样,如果传递两个参数,它们代表年份和月份。例如,

const time1 = new Date(2020, 1);
console.log(time1); // Sat Feb 01 2020 00:00:00

注意:如果您只传递一个参数,它将被视为毫秒数。因此,您必须传递两个参数才能使用此日期格式。

在 JavaScript 中,月份是从0 到 11 开始计算的。一月是0,十二月是11


JavaScript Date 方法

JavaScript Date 对象中有各种可用方法。

方法 描述
now() 返回对应于当前时间的数值(自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数)
getFullYear() 获取本地时间对应的年份
getMonth() 获取本地时间对应的月份,范围是 0 到 11
getDate() 获取本地时间对应的月份中的日期(1-31)
getDay() 获取本地时间对应的星期几(0-6)
getHours() 获取本地时间对应的时(0-23)
getMinutes 获取本地时间对应的分钟(0-59)
getUTCDate() 获取通用时间对应的月份中的日期(1-31)
setFullYear() 设置本地时间对应的完整年份
setMonth() 设置本地时间对应的月份
setDate() 设置本地时间对应的月份中的日期
setUTCDate() 设置通用时间对应的月份中的日期

示例:Date 方法

const timeInMilliseconds = Date.now();
console.log(timeInMilliseconds); // 1593765214488

const time = new Date;

// get day of the month
const date = time.getDate();
console.log(date); // 30

// get day of the week
const year = time.getFullYear();
console.log(year); // 2020

const utcDate = time.getUTCDate();
console.log(utcDate); // 30

const event = new Date('Feb 19, 2020 23:15:30');
// set the date
event.setDate(15);
console.log(event.getDate()); // 15

// Only 28 days in February!
event.setDate(35);

console.log(event.getDate()); // 7

格式化日期

与其他编程语言不同,JavaScript 没有提供内置的日期格式化函数。

但是,您可以提取单个部分并像这样使用它。

const currentDate = new Date();
const date = currentDate.getDate();
const month = currentDate.getMonth();
const year = currentDate.getFullYear();

// show in specific format
let monthDateYear = (month+1) + '/' + date + '/' + year;

console.log(monthDateYear); // 7/3/2020

注意:上面的程序会给出不一致的长度,因为日期和月份有单数和双数。


Date 对象的自动更正

当您在 Date 对象中分配超出范围的值时,它会自行更正。例如,

const date = new Date(2008, 0, 33);
// Jan does not have 33 days

console.log(date);

输出

Sat Feb 02 2008

要了解更多关于 JavaScript 中的日期和时间的信息,请访问 Demystifying Date and Time


另请阅读

在结束之前,让我们用下面的挑战来测试您对 JavaScript 日期和时间的掌握程度!您能解决以下挑战吗?

挑战

编写一个函数,将日期从“dd-mm-yyyy”格式转换为“mm-dd-yyyy”格式。

  • 假设输入日期字符串 "15-02-2020" 是以 "dd-mm-yyyy" 格式给出的。
  • 返回转换后的 "mm-dd-yyyy" 格式的日期,即 "02-15-2020"
  • 例如,如果 date = "15-02-2020",预期的输出是 "02-15-2020"
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战