JS不再百度系列-日期对象的基本操作

1,001 阅读4分钟

UTC 和 GMT

UTC是协调世界时(Universal Time Coordinated)英文缩写,GMT代表格林威治时间

格林尼治标准时(GMT)与世界时(UTC)是怎么回事 有什么差别吗

格林尼治标准时(GMT)是格林尼治天文台通过天文学观测将每日太阳穿过本初子午线的瞬间定为正午时刻,并以此来制定时间,所以格林尼治标准时是“天文学时间”,随着科技的进步,人们发现该时间不够精确,因为地球自转的速度是不均衡的,而且自转速度也会越来越慢,所以不再使用。

而协调世界时(UTC)是基于原子物理学的特性,将在海平面上实现的“原子时秒”定义为国际标准时的时间单位,而原子时秒是这样定义的:铯-133 原子基态的两个超精细能级间在零磁场下跃迁辐射9192631770周所持续的时间 。所以,协调世界时属于“原子物理时间”,它更加精确,基本不会产生误差。

以下内容来自MDN:MDN Date

创建

new Date(params)

定义:如果没有输入任何参数,则Date的构造器会依据系统设置的当前时间来创建一个Date对象。如果传入的是一个数值,则以该数值为指定的格林威治时间数值,依据系统设置的当前时间来创建一个对应格林威治时间数值的Date对象

还有其他传入参数的情况,这里不展开。详见:MDN JS Date

eg:

new Date()    //Wed May 01 2019 16:19:24 GMT+0800 (中国标准时间)
GMT+0800 北京时间比格林威治时间快八小时,所以是 GMT+0800

new Date(1559379269975)    //Sat Jun 01 2019 16:54:29 GMT+0800 (中国标准时间)

获取

Date.now()

定义:返回自1970年1月1日 00:00:00 UTC到当前时间的毫秒数。

Date​.prototype​.get​Date()

定义:根据本地时间,返回一个指定的日期对象为一个月中的哪一日(从1--31)。

eg:

new Date().getDate();    //1

Date​.prototype​.get​Full​Year()

定义:根据本地时间返回指定日期的年份。

Date​.prototype​.get​Month()

定义:返回一个指定的日期对象的月份,为基于0的值(0表示一年中的第一月)

Date​.prototype​.getDay()

定义:根据本地时间,返回一个具体日期中一周的第几天,0 表示星期天

Date​.prototype​.get​Time()

定义:返回一个时间的格林威治时间数值(返回值是数值类型)。表示从1970年1月1日0时0分0秒(UTC,即协调世界时)距离该日期对象所代表时间的毫秒数(出自于MDN)


类似Date.now(),但可以指定日期对象

其他

类似用法的还有:

  • Date​.prototype​.get​Hours()
  • Date​.prototype​.get​Seconds()
  • Date​.prototype​.get​Milliseconds()

设置

Date​.prototype​.set​Date()

定义:根据本地时间来指定一个日期对象的天数。

语法:dateObj.setDate(dayValue)

参数:

  • dayValue。可以是字符串或数字类型

备注

  • 会改变原Date对象
  • 返回值是设置天数后新对象的格林威治时间数值。即从1970年1月1日0时0分0秒(UTC,即协调世界时)距离该日期对象所代表时间的毫秒数。

eg:

date = new Date()    //date ==> Wed May 01 2019 16:54:29 GMT+0800 (中国标准时间)
date.set​Date(20)    //date ==> Mon May 20 2019 16:54:29 GMT+0800 (中国标准时间)

date.set​Date(32)    //date  Sat Jun 01 2019 16:54:29 GMT+0800 (中国标准时间)

其他

常用的类似用法的还有:

  • Date​.prototype​.set​FullYear()
  • Date​.prototype​.set​Month()
  • ...........

简单总结

  • 日期方法中getDay,getMonth,setMonth要注意一下,它们都是基于0去操作的。getDay中 0 表示星期天。getMonth和setMonth中 0 表示一月
  • 日期方法中get,set方法大多是一一对应的。但有个例外是getDay,它没有对应的set方法。即你不可以指定一个日期对象是一个星期中的星期几