Date对象

167 阅读5分钟

ECMAScript的Date类型参考了Java早期版本中的java.util.Date。为此,Date类型将日期保存为自协调世界时(UTC, Universal Time Coordinated)时间1970年1月1日午夜(零时)至今所经过的毫秒数。使用这种存储格式,Date类型可以精确表示1970年1月1日之前及之后285616年的日期。

要创建日期对象,可以使用new操作符调用Date构造函数:

new Date()   //Thu Dec 08 2022 10:27:45 GMT+0800 (中国标准时间)

在不给Date构造函数传递参数的时候,创建的对象将保存当前日期和时间。

ECMAScript提供了Date.parse()方法,该方法接收一个表示日期的字符串参数,尝试将这个字符串转换为表示该日期的毫秒数。ECMA-262第5版定义了Date.parse()应该支持的日期格式,填充了第3版遗留的空白。所有实现都必须支持下列日期格式:

  • “月/日/年”,如"5/23/2019";
  • “月名日,年”,如"May 23, 2019";
  • “周几 月名 日 年 时:分:秒 时区”,如"Tue May 232019 00:00:00GMT-0700";
  • ISO 8601扩展格式“YYYY-MM-DDTHH:mm:ss.sssZ”,如2019-05-23T00:00:00(只适用于兼容ES5的实现)。
//创建一个表示“2019年5月23日”的日期对象
let someDate = new Date(Date.parse("May 23, 2019"));  // Thu May 23 2019 00:00:00 GMT+0800 (中国标准时间)

//创建一个表示“2022年12月08日”的日期对象
new Date(Date.parse("2022/12/08"))  //Thu Dec 08 2022 00:00:00 GMT+0800 (中国标准时间)

Date.parse()  //没有传入字符串或传入的字符串不表示日期,返回NaN

如果传给Date.parse()的字符串并不表示日期,则该方法会返回NaN。

ECMAScript还提供了Date.now()方法,返回表示方法执行时日期和时间的毫秒数。

Date.now()  //1670467176542

继承的方法

与其他类型一样,Date类型重写了toLocaleString()、toString()和valueOf()方法。但与其他类型不同,重写后这些方法的返回值不一样。

toLocaleString和toString

Date类型的toLocaleString()方法返回与浏览器运行的本地环境一致的日期和时间。这通常意味着格式中包含针对时间的AM(上午)或PM(下午),但不包含时区信息(具体格式可能因浏览器而不同)。toString()方法通常返回带时区信息的日期和时间,而时间也是以24小时制(0~23)表示的。

new Date().toLocaleString()  // '2022/12/8 10:44:51'

// 通常返回带时区信息的日期和时间
new Date().toString()  //'Thu Dec 08 2022 10:45:01 GMT+0800 (中国标准时间)'

valueOf

Date类型的valueOf()方法根本就不返回字符串,这个方法被重写后返回的是日期的毫秒表示。

//返回日期的毫秒表示
new Date().valueOf()  //1670467662820


let date1 = new Date(2022, 0, 1);     // 2022年1月1日
let date2 = new Date(2022, 1, 1);     // 2022年2月1日
console.log(date1 < date2); // true
console.log(date1 > date2); // false

日期格式化方法

Date类型有几个专门用于格式化日期的方法,它们都会返回字符串:

toDateString()显示日期中的周几、月、日、年(格式特定于实现);

toTimeString()显示日期中的时、分、秒和时区(格式特定于实现);

toLocaleDateString()显示日期中的周几、月、日、年(格式特定于实现和地区);

toLocaleTimeString()显示日期中的时、分、秒(格式特定于实现和地区);

toUTCString()显示完整的UTC日期(格式特定于实现)。

这些方法的输出与toLocaleString()和toString()一样,会因浏览器而异。因此不能用于在用户界面上一致地显示日期。

//显示日期中的周几、月、日、年(格式特定于实现)
new Date().toDateString()  // 'Thu Dec 08 2022'

//显示日期中的时、分、秒和时区(格式特定于实现)
new Date().toTimeString() //'10:52:41 GMT+0800 (中国标准时间)'

//显示日期中的年、月、日(格式特定于实现和地区)
new Date().toLocaleDateString()  // '2022/12/8'

//显示日期中的时、分、秒(格式特定于实现和地区)
new Date().toLocaleTimeString()  '10:53:08'

日期/时间组件方法

  • Date(): 返回当日的日期和时间;
  • getDate(): 从Date对象返回一个月中的某一天(1~31);
  • getDay():从Date对象返回一周中的某一天(0~6);
  • getMonth(): 从Date对象返回月份(0~11);
  • getFullYear(): 从Date对象以四位数字返回年份;
  • getYear():可以使用getFullYear()代替;
  • getHours(): 返回Date()对象的小时(0~23);
  • getMinutes(): 返回Date()对象的分钟(0~59);
  • getSeconds(): 返回Date()对象的分钟(0~59);
  • getMillseconds(): 返回Date()对象的毫秒(0~999);
  • getTime(): 返回1970年1月1日至今的时间;
  • getTimezoneOffset(): 返回本地时间与格林威治标准时间(GMT)的分钟差;
  • getUTCDate(): 根据世界时从Date对象返回月中的一天(1~31);
  • getUTCDay(): 根据世界时从Date对象返回周中的一天(1~6);
  • getUTCMonth(): 根据世界时从Date对象返回月份(0~11);
  • getUTCFullYear(): 根据世界时从Date对象返回四位数的年份;
  • getUTCHours(): 根据世界时从Date对象返回对象的小时(0~23);
  • getUTCMinutes(): 根据世界时从Date对象返回对象的分钟(0~59);
  • getUTCSeconds(): 根据世界时从Date对象返回对象的秒钟(0~59);
  • getUTCMillseconds(): 根据世界时从Date对象返回对象的毫秒(0~999);
  • parse(): 返回1970年1月1日午夜到指定日期(字符串)的毫秒数;
  • setDate(): 设置Date对象中月的某一天(1~31);
  • setMonth(): 设置Date对象中月份(0~11);
  • setFullYear(): 设置Date对象中的年份(四位数字);