JavaScript的日期对象

39 阅读5分钟
日期对象

JavaScript 处理日期数据类似于 Java。这两种语言有许多一样的处理日期的方法,也都是以 1970 年 1 月 1 日 00:00:00 以来的毫秒数来储存数据类型的。

Date 对象的范围是相对距离 UTC 1970 年 1 月 1 日 的前后 100,000,000 天。

创建一个日期对象

let newObjectName =new Date([parameters])

注:

  • 使用 Date 时与内置对象 console 和 Math 不同,它需要借助 new 关键字才能使用。
  • 不使用 new 关键字来调用 Date 对象将返回当前时间和日期的字符串

前边的语法中的参数(parameters)可以是一下任何一种:

  1. 无参数 : 创建今天的日期和时间,例如: today = new Date();.
  2. 一个符合以下格式的表示日期的字符串:"月 日,年 时:分:秒"。例如: let Xmas95 = new Date("December 25, 1995 13:30:00")。如果你省略时、分、秒,那么他们的值将被设置为 0。
  3. 一个年,月,日的整型值的集合,例如: let Xmas95 = new Date(1995, 11, 25)
  4. 一个年,月,日,时,分,秒的集合,例如: let Xmas95 = new Date(1995, 11, 25, 9, 30, 0);.
  5. ==[[ISO 8601]]格式(推荐)==
时间戳

时间戳是指1970年01月01日00时00分00秒起至现在的总秒数或毫秒数,它是一种特殊的计量时间的方式。

注:ECMAScript 中时间戳是以毫秒计的。 总共三种方法

     // 1. 实例化  
   const date = new Date()  
   // 2. 获取时间戳  
   console.log(date.getTime())  
 // 还有一种获取时间戳的方法  
   console.log(+new Date())  
   // 还有一种获取时间戳的方法  
   console.log(Date.now())  

 前两种方法可以返回指定时间的时间戳,第三种不行​  

日期(Date)方法

处理日期时间的 Date 对象方法可分为以下几类:

  • "set" 方法,用于设置 Date 对象的日期和时间的值。
  • "get" 方法,用于获取 Date 对象的日期和时间的值。
  • "to" 方法,用于返回 Date 对象的字符串格式的值。
  • parse 和 UTC 方法,用于解析 Date 字符串。

通过“get”和“set”方法,你可以分别设置和获取秒,分,时,日,星期,月份,年。这里有个 getDay 方法可以返回星期,但是没有相应的 setDay 方法用来设置星期,因为星期是自动设置的。这些方法用整数来代表以下这些值:

  • 秒,分:0 至 59
  • 时:0 至 23
  • 星期:0 (周日) 至 6 (周六)
  • 日期:1 至 31
  • 月份:0 (一月) to 11 (十二月)
  • 年份:从 1900 开始的年数

具体方法 getTime返回从 1970 年 1 月 1 日 00:00:00 的毫秒数

getFullYear 获取四位年份

getMonth 获取月份,取值为 0 ~ 11

getDate 获取月份中的每一天,不同月份取值也不相同

getDay 获取星期,取值为 0 ~ 6

getHours 获取小时,取值为 0 ~ 23

getMinutes 获取分钟,取值为 0 ~ 59

getSeconds 获取秒,取值为 0 ~ 59

方法描述对应的 set 方法说明
getTime获取从 1970 年 1 月 1 日 00:00:00 的毫秒数setTime设置从 1970 年起的毫秒数
getFullYear获取四位年份setFullYear设置年份,可以同时修改年、月、日
getMonth获取月份(0 ~ 11,0 表示 1 月)setMonth设置月份,超出范围会自动调整年份
getDate获取月份中的某一天(1 ~ 31)setDate设置日期,超出范围会自动调整月份
getDay获取星期几(0 ~ 6,0 表示周日)没有对应的 setDay星期是从日期计算得出的,不能单独设置
getHours获取小时(0 ~ 23)setHours设置小时,可以同时修改小时、分钟、秒和毫秒
getMinutes获取分钟(0 ~ 59)setMinutes设置分钟,可以同时修改分钟、秒和毫秒
getSeconds获取秒(0 ~ 59)setSeconds设置秒,可以同时修改秒和毫秒
toLocaleString返回当下的年月日时分秒字符串(自动补0)
toLocaleDateString返回当下的年月日
toLocaleTimeString返回当下的时分秒

示例:

  1. 修改年份、月份和日期
const date = new Date('2020-01-01');
date.setFullYear(2021);  // 修改年份为 2021
date.setMonth(11);       // 修改月份为 12 月(11 表示 12 月)
date.setDate(25);        // 修改日期为 25 日
console.log(date);       // 2021-12-25T00:00:00.000Z
  1. 修改时间
const date = new Date('2020-01-01T10:30:00');
date.setHours(15);       // 修改小时为 15 点
date.setMinutes(45);     // 修改分钟为 45 分
date.setSeconds(30);     // 修改秒为 30 秒
console.log(date);       // 2020-01-01T15:45:30.000Z
  1. 使用 setTime 修改时间戳
const date = new Date();
date.setTime(1609459200000); // 设置时间戳为 2021-01-01T00:00:00.000Z
console.log(date);           // Fri Jan 01 2021 00:00:00 GMT+0000
  1. 获取本地时间
  // 1. 实例化
 const date = new Date();
 // 2. 调用时间对象方法
 // 通过方法分别获取年、月、日,时、分、秒
 const year = date.getFullYear(); // 四位年份
 const month = date.getMonth(); // 0 ~ 11
  1. 返回今年剩下的天数
var today = new Date();
var endYear = new Date(1995, 11, 31, 23, 59, 59, 999); // 设置日和月,注意,月份是 0-11
endYear.setFullYear(today.getFullYear()); // 把年设置为今年
var msPerDay = 24 * 60 * 60 * 1000; // 每天的毫秒数
var daysLeft = (endYear.getTime() - today.getTime()) / msPerDay;
var daysLeft = Math.round(daysLeft); //返回今年剩下的天数


什么是ISO 8601格式

const date = new Date('2020-05-01');

就是ISO 8601格式 标准规范式是

YYYY-MM-DDTHH:mm:ss.sssZ

可以确保跨平台的一致性

现在对上面的格式作出解释 例如

const date = new Date('2020-05-01T00:00:00Z');
  1. Z明确表示该时间是协调世界时(UTC)
  2. UTC(零时区)等价于+00:00
  3. 如果不用Z或者+hh:mm的时间字符串,解析时可能使用本地时区
  4. T是日期和时间的分隔符,是ISO 8601标准的一部分
  5. T在只有日期没有时间时可以省略,若有时间则不可省略