# 语法:
new Date(); | |
new Date(value); | |
new Date(dateString); | |
new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]); |
# 参数
Date() 构造函数有四种基本形式
# 1. 没有参数
如果没有提供参数,那么新创建的 Date 对象表示实例化时刻的日期和时间。
# 2. Unix 时间戳
value
一个 Unix 时间戳(Unix Time Stamp),它是一个整数值,表示自 1970 年 1 月 1 日 00:00:00 UTC(the Unix epoch)以来的毫秒数,忽略了闰秒。请注意大多数 Unix 时间戳功能仅精确到最接近的秒。
# 3. 时间戳字符串
dateString
表示日期的字符串值。该字符串应该能被 Date.parse() 正确方法识别(即符合 IETF-compliant RFC 2822 timestamps 或 version of ISO8601)。
注意: 由于浏览器之间的差异与不一致性,强烈不推荐使用 Date 构造函数来解析日期字符串 (或使用与其等价的 Date.parse)。对 RFC 2822 格式的日期仅有约定俗成的支持。 对 ISO 8601 格式的支持中,仅有日期的串 (例如 "1970-01-01") 会被处理为 UTC 而不是本地时间,与其他格式的串的处理不同。
** 如下:同一操作系统不同浏览器对字符串的解析都有所差异:**
Chrome: new Date("2021-1-16"); | |
// Sat Jan 16 2021 00:00:00 GMT+0800 (中国标准时间) | |
new Date("2021-01-16"); | |
// Sat Jan 16 2021 08:00:00 GMT+0800 (中国标准时间) | |
FireFox; | |
new Date("2021/1/16"); | |
// Sat Jan 16 2021 00:00:00 GMT+0800 (中国标准时间) | |
new Date("2021/01/16"); | |
// Sat Jan 16 2021 00:00:00 GMT+0800 (中国标准时间) | |
//.replace ('-', '/') 防止各浏览器差异 2021-1-16 解析成 UTC,GMT 的坑 | |
dateRange.firstTime = dateRange.firstTime.replace(/\-/g, "/"); | |
dateRange.endTime = dateRange.endTime.replace(/\-/g, "/"); | |
//iOS 某些系统版本的坑,以上两行 replace 不能直接放在以下 new Date () 里面 | |
let firstTime = new Date(dateRange.firstTime).valueOf(); | |
let endTime = new Date(dateRange.endTime).valueOf(); |
# 4. 分别提供日期与时间的每一个成员
当至少提供了年份与月份时,这一形式的 Date () 返回的 Date 对象中的每一个成员都来自下列参数。没有提供的成员将使用最小可能值(对日期为 1,其他为 0)。
year
表示年份的整数值。 0 到 99 会被映射至 1900 年至 1999 年,其它值代表实际年份。参见 示例。
monthIndex (年月日中这个值比较特别)
表示月份的整数值,从 0(1 月)到 11(12 月)。
date 可选
表示一个月中的第几天的整数值,从 1 开始。默认值为 1。
hours 可选
表示一天中的小时数的整数值 (24 小时制)。默认值为 0(午夜)。
minutes 可选
表示一个完整时间(如 01:10:00)中的分钟部分的整数值。默认值为 0。
seconds 可选
表示一个完整时间(如 01:10:00)中的秒部分的整数值。默认值为 0。
milliseconds 可选
表示一个完整时间的毫秒部分的整数值。默认值为 0。
一些比较有用的技巧或坑点:
- 将 date 参数设置为 0 可得到上个月的最后一天,在做日历的时候非常有用.
// new Date(2022, 1, 1) // 2022/2/1 | |
new Date(2022, 1, 0); // 2022/1/31 | |
const range = function (n: number) { | |
return Array(n) | |
.fill(0) | |
.map((_, index) => index); | |
}; | |
const getPrevMonthLastDays = (date: Date, amount: number) => { | |
if (amount <= 0) { | |
return []; | |
} | |
const tempDate = new Date(date.getTime()); | |
tempDate.setDate(0); | |
const year = tempDate.getFullYear(); | |
const month = tempDate.getMonth(); | |
const lastDay = tempDate.getDate(); | |
return range(amount).map((_, index: number) => ({ | |
year, | |
month, | |
date: lastDay - (amount - index - 1), | |
})); | |
}; |
- 调用 Date 对象的 set 方法(setDate(),setFullYear()_...)返回时间戳数字 如: _177610530000