# 语法:

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 timestampsversion 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。

一些比较有用的技巧或坑点:

  1. 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),
  }));
};
  1. 调用 Date 对象的 set 方法(setDate()setFullYear()_...)返回时间戳数字 如: _177610530000
更新于 阅读次数