Skip to content

日期-Date

1.1 作用

js原生用来获取时间的api

推荐的日期格式化库:

1.2 构造函数

js
new Date()
new Date(value)
new Date(dateString)
new Date(dateObject)

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

Date()

备注: 调用 Date() 时可以使用或不使用 new,但是它们有不同的效果。参见返回值部分。

1.2.1 参数

对于 Date() 构造函数,有五种基本的形式:

1.无参数

当没有提供参数时,新创建的 Date 对象代表当前的世界标准时间

  • 在标准时间上加上8小时,即东八区时间,也就是北京时间。
  • 北京时间:2020-01-14 00:00:00对应的国际标准时间格式为:2020-01-13T16:00:00.000Z
js
const date=new Date()
// 当前北京时间时间 2021-03-20 14:00:00
console.log(date) // 2024-03-20T06:00:00.000Z

2.时间或时间戳值

value:一个整数时间戳,代表自 UTC 1970 年 1 月 1 日 00:00:00以来的毫秒数,忽略闰秒。

js
const date=new Date(1616220000000)
console.log(date) // 2021-03-20T06:00:00.000Z

3.日期字符串

dateString:一个代表日期的字符串值,符合 ISO 8601 格式:YYYY-MM-DDTHH:mm:ss.ssZ

  • 仅有日期的字符串(例如 "1970-01-01")被视为 UTC,而日期时间的字符串(例如 "1970-01-01T12:00")被视为本地时间。因此,我们也建议你确保这两种类型的输入格式是一致的。
js
const date=new Date('1970-01-01')
console.log(date) // 1970-01-01T00:00:00.000Z

4.日期对象

dateObject:一个现有的 Date 对象。这实际上是在现有的 Date 对象上复制了一个相同的日期和时间。这等同于 new Date(dateObject.valueOf()),除了不调用 valueOf() 方法。

js
const date=new Date('1970-01-01')
const date1=new Date(date)

console.log(date1) //1970-01-01T00:00:00.000Z

5.日期和时间组件的单独值

给出至少一个年份和月份

这种形式的 Date() 返回一个 Date 对象,其组成部分的值(年、月、日、小时、分钟、秒和毫秒)都来自以下参数。

任何缺失的字段都被赋予可能的最低值day1,其他所有组件为 0)。这些参数值都是根据当地的时区,而不是 UTC 来评估的。

如果任何参数超过其定义的范围,会发生“进位”。

例如,如果传入一个大于 11monthIndex,这些月将导致年的递增;

如果传入一个大于 59minuteshours 将相应递增,等等。因此,new Date(1990, 12, 1) 将返回 1991 年 1 月 1 日;new Date(2020, 5, 19, 25, 65) 将返回 2020 年 6 月 20 日凌晨 2:05。

类似的,如果任何参数不足其定义的范围,会从高位“借位”。例如,new Date(2020, 5, 0) 将返回 2020 年 5 月 31 日。

  • year:表示年的整数。从 099 的值映射了 19001999 年。其他值对应真实的年份
  • monthIndex:表示月份的整数,从代表一月的 0 开始到代表十二月的 11 结束。
  • day:表示一个月中第几天的整数。默认为 1
  • hours:表示一天中的小时数的整数值,在 023 之间。默认值为 0
  • minutes:表示时间的分钟段的整数值。默认为小时后的 0 分钟。
  • seconds:表示时间的秒数段的整数值。默认为分钟后的 0 秒。
  • milliseconds:表示时间的毫秒段的整数值。默认为 0 毫秒的秒数。
js
const date = new Date(2000,5,22); // 月份是以 0 为索引的
const date1 = new Date(1995, 11, 17, 3, 24, 0);

console.log(date) // 2000-06-21T16:00:00.000Z
console.log(date1) // 1995-12-16T19:24:00.000Z

1.2.2 返回值

调用 new Date()Date() 构造函数)会返回一个 Date 对象。

如果调用无效的日期字符串,或者如果要构建的日期的 UNIX 时间戳小于 -8,640,000,000,000 或大于 8,640,000,000,000 毫秒,它会返回一个 Date 对象,其 toString() 方法返回字面量字符串 Invalid Date

调用 Date() 函数(没有 new 关键字)会返回当前日期和时间的字符串表示。

就像 new Date().toString() 那样。调用 Date() 函数(没有 new 关键字)时给出的任何参数都会被忽略;无论调用的是一个无效的日期字符串,甚至使用任何任意对象或其他原始值作为参数,它总是返回一个当前日期和时间的字符串表示。

1.3 原型方法

  • Date()构造函数没有传入指定日期,则返回本地日期时间
  • 若传入指定日期,则返回指定日期时间

1.3.1 获取本地日期时间

js
const date=new Date()

date.getFullYear()		// 以四位数字返回年份
date.getMonth()			// 返回月份(0~11),0表示1月,以此类推  (注:写代码时对应加1)
date.getDate()			// 返回一个月中的某一天(1~31) 
date.getDay()			// 返回一周中的某一天(0~6),0表示周日 

date.getHours()			// 返回小时 (0 ~ 23)
date.getMinutes()		// 返回分钟 (0 ~ 59)
date.getSeconds()		// 返回秒数 (0 ~ 59) 
date.getMilliseconds()	// 返回毫秒数(0 ~ 999)

date.getTime()			// 返回1970年1月1号至今的毫秒数 - 时间戳       1秒 === 1000毫秒

1.3.2 获取UTC日期时间

js
const date=new Date()

date.getUTCFullYear()		// 以四位数字返回世界时间年份
date.getUTCMonth()			// 返回世界时间月份(0~11),0表示1月,以此类推  (注:写代码时对应加1)
date.getUTCDate()			// 返回世界时间一个月中的某一天(1~31) 
date.getUTCDay()			// 返回世界时间一周中的某一天(0~6),0表示周日 

date.getUTCHours()			// 返回世界时间小时 (0 ~ 23)
date.getUTCMinutes()		// 返回世界时间分钟 (0 ~ 59)
date.getUTCSeconds()		// 返回世界时间秒数 (0 ~ 59) 
date.getUTCMilliseconds()	// 返回世界时间毫秒数(0 ~ 999)

1.3.3 设置日期时间

js
const date=new Date()

date.setFullYear(year)				// 设置年份
date.setMonth(month)				// 设置月份
date.setDate(date)					// 设置一个月中的某一天

date.setHours(hours)				// 设置小时
date.setMinutes(minites)			// 设置分钟
date.setSeconds(seconds)			// 设置秒
date.setMilliseconds(milliseconds)	// 设置毫秒

date.setTime()						// 以传入时间戳的方式设置时间

1.3.4 设置UTC日期时间

js
const date=new Date()

date.setUTCFullYear(year)				// 设置UTC年份
date.setUTCMonth(month)					// 设置UTC月份
date.setUTCDate(date)					// 设置UTC一个月中的某一天

date.setUTCHours(hours)					// 设置UTC小时
date.setUTCMinutes(minites)				// 设置UTC分钟
date.setUTCSeconds(seconds)				// 设置UTC秒
date.setUTCMilliseconds(milliseconds)	// 设置UTC毫秒

1.3.5 转化为时间字符串

  • 如果你只想获取日期,请使用 toDateString()
  • 如果你只想获取时间,请使用 toTimeString()
  • 如果你想要获取 UTC 时间而非本地时间,请使用 toUTCString()
  • 如果你想要以对用户更加友好的格式(例如,本地化)输出字符串,请使用 toLocaleString()

toDateString()

以美式英语和人类易读的形式返回一个日期对象日期部分的字符串。

js
const date = new Date(1937, 7, 7, 14, 0, 0);
console.log(date.toDateString()); // Sat Aug 07 1937

toISOString()

返回一个 ISO(ISO 8601 Extended Format)格式的字符串: YYYY-MM-DDTHH:mm:ss.sssZ。时区总是 UTC(协调世界时),加一个后缀“Z”标识。

js
const date = new Date('05 October 2011 14:48 UTC');
console.log(date.toISOString()); // 2011-10-05T14:48:00.000Z

toJSON()

返回 Date 对象的字符串形式。

js
const date = new Date('August 19, 1975 23:15:30 UTC');
const jsonDate = date.toJSON();
console.log(jsonDate); //1975-08-19T23:15:30.000Z

toLocaleString()

返回指定日期对象日期以及时间部分的字符串,该字符串格式因不同语言而不同

语法

js
toLocaleString()
toLocaleString(locales)
toLocaleString(locales, options)

参数

  • locale:指定要使用的区域设置。它可以是一个字符串,例如'zh-CN'表示中文(中国),或者是一个对象,其中包含localeoptions属性。如果省略该参数,则使用系统默认的区域设置。
  • options:一个对象,其中包含以下可选的属性:
    • dateStyle:指定日期部分的格式。它可以是以下值之一:
      • 'full':完整的日期和时间,例如'YYYY 年 M 月 D 日 HH:mm:ss'(12 小时制)或'YYYY 年 M 月 D 日 h:mm:ss a'(24 小时制)。
      • 'long':长格式的日期和时间,例如'YYYY 年 M 月 D 日'
      • 'medium':中等长度的日期和时间,例如'YYYY-MM-DD HH:mm:ss'(12 小时制)或'YYYY-MM-DD h:mm:ss a'(24 小时制)。
      • 'short':短格式的日期和时间,例如'YYYY-M-D'
    • timeStyle:指定时间部分的格式。它可以是以下值之一:
      • 'full':完整的时间,包括秒和毫秒,例如'HH:mm:ss.SSS'
      • 'long':长格式的时间,例如'HH:mm:ss'
      • 'medium':中等长度的时间,例如'HH:mm:ss'
      • 'short':短格式的时间,例如'HH:mm'
    • weekday:指定星期几的缩写。它可以是以下值之一:
      • 'long':完整的星期几名称,例如'星期一'
      • 'short':缩写的星期几名称,例如'周一'
      • 'narrow':简短的星期几名称,例如'一'
    • month:指定月份的缩写。它可以是以下值之一:
      • 'long':完整的月份名称,例如'一月'
      • 'short':缩写的月份名称,例如'1 月'
      • 'narrow':简短的月份名称,例如'1'
    • day:指定日期的缩写。它可以是以下值之一:
      • 'numeric':数字格式的日期,例如'1'
      • '2-digit':两位数字格式的日期,例如'01'
    • hour12:指定是否使用 12 小时制。如果为true,则使用 12 小时制;如果为false(默认值),则使用 24 小时制。
    • minutesecondmillisecond:指定分钟、秒和毫秒的缩写。它们可以是以下值之一:
      • 'numeric':数字格式的时间单位。
      • '2-digit':两位数字格式的时间单位。
    • timeZone:指定要使用的时区。它可以是一个字符串,例如'UTC'表示协调世界时(UTC),或者是一个对象,其中包含timeZoneoptions属性

返回值:一个表示给定的 Date 实例的日期部分,且与语言相关的字符串。

js
const date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));

// 以下格式化输出均假设使用区域的本地时区;
// 对于美国,为 America/Los_Angeles

// 美式英语,使用 month-day-year 的顺序以及带有 AM/PM 的 12 小时制
console.log(date.toLocaleString("en-US"));
// "12/19/2012, 7:00:00 PM"

// 英式英语,使用 day-month-year 的顺序以及不带有 AM/PM 的 24 小时制
console.log(date.toLocaleString("en-GB"));
// "20/12/2012 03:00:00"

// 韩国,使用 year-month-day 的顺序以及带有 AM/PM 的 12 小时制
console.log(date.toLocaleString("ko-KR"));
// "2012. 12. 20. 오후 12:00:00"

// 大多数阿拉伯国家使用真正的阿拉伯数字
console.log(date.toLocaleString("ar-EG"));
// "٢٠‏/١٢‏/٢٠١٢ ٥:٠٠:٠٠ ص"

// 对于日语,应用倾向于使用日本的和历,
// 2012 年是平成时代的第 24 年
console.log(date.toLocaleString("ja-JP-u-ca-japanese"));
// "24/12/20 12:00:00"

// 当使用的语言不被支持,例如
// 巴厘岛语,则可以包含一种回退语言,这里以印尼语为例
console.log(date.toLocaleString(["ban", "id"]));
// "20/12/2012 11.00.00"

toLocaleDateString()

返回指定日期对象日期部分的字符串,该字符串格式因不同语言而不同

语法

js
toLocaleDateString()
toLocaleDateString(locales)
toLocaleDateString(locales, options)

参数同toLocaleString

js
const date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));

// 以下格式化输出均假设使用区域的本地时区;
// 对于美国,为 America/Los_Angeles

// 美式英语,使用 month-day-year 的顺序
console.log(date.toLocaleDateString("en-US"));
// "12/20/2012"

// 英式英语,使用 day-month-year 的顺序
console.log(date.toLocaleDateString("en-GB"));
// "20/12/2012"

// 韩国,使用 year-month-day 的顺序
console.log(date.toLocaleDateString("ko-KR"));
// "2012. 12. 20."

// Event for Persian, It's hard to manually convert date to Solar Hijri
console.log(date.toLocaleDateString("fa-IR"));
// "۱۳۹۱/۹/۳۰"

// 大多数阿拉伯国家使用真正的阿拉伯数字
console.log(date.toLocaleDateString("ar-EG"));
// "٢٠‏/١٢‏/٢٠١٢"

// 对于日语,应用倾向于使用日本的和历,
// 2012 年是平成时代的第 24 年
console.log(date.toLocaleDateString("ja-JP-u-ca-japanese"));
// "24/12/20"

// 当使用的语言不被支持,例如
// 巴厘岛语,则可以包含一种回退语言,这里以印尼语为例
console.log(date.toLocaleDateString(["ban", "id"]));
// "20/12/2012"

toLocaleTimeString()

返回该日期对象时间部分的字符串,该字符串格式因语言而异

语法

js
toLocaleTimeString()
toLocaleTimeString(locales)
toLocaleTimeString(locales, options)

参数同toLocaleString

js
const date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));

// 以下格式化输出均假设使用区域的本地时区;
// 对于美国,为 America/Los_Angeles

// 美式英语,使用带有 AM/PM 的 12 小时制
console.log(date.toLocaleTimeString("en-US"));
// "11:00:00 AM"

// 英式英语,使用不带有 AM/PM 的 24 小时制
console.log(date.toLocaleTimeString("en-GB"));
// "03:00:00"

// 韩国,使用带有 AM/PM 的 12 小时制
console.log(date.toLocaleTimeString("ko-KR"));
// "오후 12:00:00"

// 大多数阿拉伯国家使用真正的阿拉伯数字
console.log(date.toLocaleTimeString("ar-EG"));
// "٧:٠٠:٠٠ م"

// 当使用的语言不被支持,例如
// 巴厘岛语,则可以包含一种回退语言,这里以印尼语为例
console.log(date.toLocaleTimeString(["ban", "id"]));
// "11.00.00"

toString()

返回一个字符串,以本地的时区表示该 Date对象

js
const x = new Date();
console.log(x.toString()); // Wed Sep 09 1998 05:36:22 GMT+0800 (中国标准时间)

toTimeString()

以人类易读形式返回一个日期对象时间部分的字符串,该字符串以美式英语格式化。

js
var d = new Date(1993, 6, 28, 14, 39, 7);

println(d.toString()); // prints Wed Jul 28 1993 14:39:07 GMT-0600 (PDT)
println(d.toTimeString()); // prints 14:39:07 GMT-0600 (PDT)

toUTCString()

把一个日期转换为一个字符串,使用 UTC 时区。

js
const event = new Date('14 Jun 2017 00:00:00 PDT');

console.log(event.toUTCString());
// "Wed, 14 Jun 2017 07:00:00 GMT"

1.3.5 时间戳

valueOf()

返回时间戳,从 1970 年 1 月 1 日 0 时 0 分 0 秒(UTC,即协调世界时)到该日期的毫秒数。

js
const date = new Date();
console.log(date.valueOf());  //1711005026159

该方法的功能和 Date.prototype.getTime() 方法一样。

1.4 静态方法

Date.now()

返回时间戳,自 1970 年 1 月 1 日 00:00:00 (UTC) 到当前时间的毫秒数。

js
console.log(Date.now());  //1711005026159

Date.parse()

解析一个表示某个日期的字符串,并返回时间戳,如果该字符串无法识别,或者一些情况下,包含了不合法的日期数值(如:2015-02-31),则返回值为 NaN。

js
Date.parse(dateString)

参数

  • dateString

    一个符合 RFC2822 或 ISO 8601 日期格式的字符串(其他格式也许也支持,但结果可能与预期不符)。

返回值

一个表示从 1970-1-1 00:00:00 UTC 到给定日期字符串所表示时间的毫秒数的数值。如果参数不能解析为一个有效的日期,则返回NaN

Date.UTC()

Date.UTC() 方法接受的参数同 Date 构造函数接受最多参数时一样,但该前者会视它们为 UTC 时间,其返回从 1970 年 1 月 1 日 00:00:00 UTC 到指定时间的毫秒数。

js
const utcDate1 = new Date(Date.UTC(96, 1, 2, 3, 4, 5));
const utcDate2 = new Date(Date.UTC(0, 0, 0, 0, 0, 0));

console.log(utcDate1.toUTCString());
// Expected output: "Fri, 02 Feb 1996 03:04:05 GMT"

console.log(utcDate2.toUTCString());
// Expected output: "Sun, 31 Dec 1899 00:00:00 GMT"

MIT Licensed