Date对象是 JavaScript 原生的时间库。它以1970年1月1日00:00:00作为时间的零点, 可以表示的时间范围是前后各1亿天(单位为毫秒)。

一、普通函数的用法

Date对象可以作为普通函数直接调用,返回一个代表当前时间的字符串。

注意,即使带有参数,Date作为普通函数使用时,返回的还是当前时间。

上面代码说明,无论有没有参数,直接调用Date总是返回当前时间。

二、构造函数的用法

Date还可以当作构造函数使用。对它使用new命令,会返回一个Date对象的实例。如果不加参数,实例代表的就是当前时间。

Date实例有一个独特的地方。其他对象求值的时候,都是默认调用.valueOf()方法,但是Date实例求值的时候,默认调用的是toString()方法。这导致对Date实例求值,返回的是一个字符串,代表该实例对应的时间。

上面代码中,today是Date的实例,直接求值等同于调用toString方法。

作为构造函数时,Date对象可以接受多种格式的参数,返回一个该参数对应的时间实例。

关于Date构造函数的参数,有几点说明。第一点,参数可以是负整数,代表1970年元旦之前的时间。

第二点,只要是能被Date.parse()方法解析的字符串,都可以当作参数。

上面多种日期字符串的写法,返回的都是同一个时间。

第三,参数为年、月、日等多个整数时,年和月是不能省略的,其他参数都可以省略的。也就是说,这时至少需要两个参数,因为如果只使用“年”这一个参数,Date会将其解释为毫秒数。

上面代码中,不管有几个参数,返回的都是2013年1月1日零点。

最后,各个参数的取值范围如下。

 年:使用四位数年份,比如2000。如果写成两位数或个位数,则加上1900,即10代表1910年。如果是负数,表示公元前。月:0表示一月,依次类推,11表示12月。日:1到31。小时:0到23。分钟:0到59。秒:0到59毫秒:0到999。
复制代码

注意,月份从0开始计算,但是,天数从1开始计算。另外,除了日期的默认值为1,小时、分钟、秒钟和毫秒的默认值都是0。

这些参数如果超出了正常范围,会被自动折算。比如,如果月设为15,就折算为下一年的4月。

上面代码的第二个例子,日期设为0,就代表上个月的最后一天。

参数还可以使用负数,表示扣去的时间。

上面代码中,分别对月和日使用了负数,表示从基准日扣去相应的时间。

三、日期的运算

类型自动转换时,Date实例如果转为数值,则等于对应的毫秒数;如果转为字符串,则等于对应的日期字符串。所以,两个日期实例对象进行减法运算时,返回的是它们间隔的毫秒数;进行加法运算时,返回的是两个字符串连接而成的新字符串。

四、静态方法

4.1 Date.now()

Date.now方法返回当前时间距离时间零点(1970年1月1日 00:00:00 UTC)的毫秒数,相当于 Unix 时间戳乘以1000。

4.2 Date.parse()

Date.parse方法用来解析日期字符串,返回该时间距离时间零点(1970年1月1日 00:00:00)的毫秒数。

日期字符串应该符合 RFC 2822 和 ISO 8061 这两个标准,即YYYY-MM-DDTHH:mm:ss.sssZ格式,其中最后的Z表示时区。但是,其他格式也可以被解析,请看下面的例子。

如果解析失败,返回NaN。

4.3 Date.UTC()

Date.UTC方法接受年、月、日等变量作为参数,返回该时间距离时间零点(1970年1月1日 00:00:00 UTC)的毫秒数。

该方法的参数用法与Date构造函数完全一致,比如月从0开始计算,日期从1开始计算。区别在于Date.UTC方法的参数,会被解释为 UTC 时间(世界标准时间),Date构造函数的参数会被解释为当前时区的时间。

 // 格式Date.UTC(year, month[, date[, hrs[, min[, sec[, ms]]]]])
复制代码

五、实例方法

Date的实例对象,有几十个自己的方法,除了valueOf和toString,可以分为以下三类。

 to类:从Date对象返回一个字符串,表示指定的时间。get类:获取Date对象的日期和时间。set类:设置Date对象的日期和时间。
复制代码

5.1 Date.prototype.valueOf()

valueOf方法返回实例对象距离时间零点(1970年1月1日00:00:00 UTC)对应的毫秒数,该方法等同于getTime方法。

预期为数值的场合,Date实例会自动调用该方法,所以可以用下面的方法计算时间的间隔。

 var start = new Date();// ...var end = new Date();var elapsed = end - start;
复制代码

5.2 to类方法

(1)Date.prototype.toString()

toString方法返回一个完整的日期字符串。

因为toString是默认的调用方法,所以如果直接读取Date实例,就相当于调用这个方法。

(2)Date.prototype.toUTCString()

toUTCString方法返回对应的 UTC 时间,也就是比北京时间晚8个小时。

(3)Date.prototype.toISOString()

toISOString方法返回对应时间的 ISO8601 写法。

注意,toISOString方法返回的总是 UTC 时区的时间。

(4)Date.prototype.toJSON()

toJSON方法返回一个符合 JSON 格式的 ISO 日期字符串,与toISOString方法的返回结果完全相同。

(5)Date.prototype.toDateString()

toDateString方法返回日期字符串(不含小时、分和秒)。

(6)Date.prototype.toTimeString()

toTimeString方法返回时间字符串(不含年月日)。

(7)Date.prototype.toLocaleDateString()

toLocaleDateString方法返回一个字符串,代表日期的当地写法(不含小时、分和秒)。

(8)Date.prototype.toLocaleTimeString()

toLocaleTimeString方法返回一个字符串,代表时间的当地写法(不含年月日)。

5.3 get类方法

Date对象提供了一系列get*方法,用来获取实例对象某个方面的值。

 getTime():返回实例距离1970年1月1日00:00:00的毫秒数,等同于valueOf方法。getDate():返回实例对象对应每个月的几号(从1开始)。getDay():返回星期几,星期日为0,星期一为1,以此类推。getYear():返回距离1900的年数。getFullYear():返回四位的年份。getMonth():返回月份(0表示1月,11表示12月)。getHours():返回小时(0-23)。getMilliseconds():返回毫秒(0-999)。getMinutes():返回分钟(0-59)。getSeconds():返回秒(0-59)。getTimezoneOffset():返回当前时间与 UTC 的时区差异,以分钟表示,返回结果考虑到了夏令时因素。
复制代码

所有这些get*方法返回的都是整数,不同方法返回值的范围不一样。

 分钟和秒:0 到 59小时:0 到 23星期:0(星期天)到 6(星期六)日期:1 到 31月份:0(一月)到 11(十二月)年份:距离1900年的年数
复制代码

上面代码中,最后一行返回-480,即 UTC 时间减去当前时间,单位是分钟。-480表示 UTC 比当前时间少480分钟,即当前时区比 UTC 早8个小时。

上面这些get*方法返回的都是当前时区的时间,Date对象还提供了这些方法对应的 UTC 版本,用来返回 UTC 时间

 getUTCDate()getUTCFullYear()getUTCMonth()getUTCDay()getUTCHours()getUTCMinutes()getUTCSeconds()getUTCMilliseconds()
复制代码

上面代码中,实例对象d表示当前时区(东八时区)的7月16日0点0分0秒,这个时间对于当前时区来说是7月16日,所以getDate方法返回16,对于 UTC 时区来说是7月15日,所以getUTCDate方法返回15。

5.4 set类方法

Date对象提供了一系列set*方法,用来设置实例对象的各个方面。

 setDate(date):设置实例对象对应的每个月的几号(1-31),返回改变后毫秒时间戳。setYear(year): 设置距离1900年的年数。setFullYear(year [, month, date]):设置四位年份。setHours(hour [, min, sec, ms]):设置小时(0-23)。setMilliseconds():设置毫秒(0-999)。setMinutes(min [, sec, ms]):设置分钟(0-59)。setMonth(month [, date]):设置月份(0-11)。setSeconds(sec [, ms]):设置秒(0-59)。setTime(milliseconds):设置毫秒时间戳。
复制代码

这些方法基本是跟get*方法一一对应的,但是没有setDay方法,因为星期几是计算出来的,而不是设置的。另外,需要注意的是,凡是涉及到设置月份,都是从0开始算的,即0是1月,11是12月。

set*方法的参数都会自动折算。以setDate为例,如果参数超过当月的最大天数,则向下一个月顺延,如果参数是负数,表示从上个月的最后一天开始减去的天数。set类方法和get类方法,可以结合使用,得到相对时间。

 var d = new Date();// 将日期向后推1000天d.setDate(d.getDate() + 1000);// 将时间设为6小时后d.setHours(d.getHours() + 6);// 将年份设为去年d.setFullYear(d.getFullYear() - 1);
复制代码

set*系列方法除了setTime()和setYear(),都有对应的 UTC 版本,即设置 UTC 时区的时间。

 setUTCDate()setUTCFullYear()setUTCHours()setUTCMilliseconds()setUTCMinutes()setUTCMonth()setUTCSeconds()
复制代码

上面代码中,本地时区(东八时区)的7月16日0点0分,是 UTC 时区的前一天下午16点。设为 UTC 时区的22点以后,就变为本地时区的上午6点。

本文转载自http://javascript.ruanyifeng.com/stdlib/date.html

转载于:https://juejin.im/post/5b4c3f41e51d45191f0ce72a

JS学习--Date对象相关推荐

  1. js实现小时钟,js中Date对象的使用?

    介绍一下js中Date对象的使用 dateObj = new Date() dateObj = new Date(dateValue) dateObj = new Date(year,month,da ...

  2. JS之Date对象和获取系统当前时间

    一.Date对象 每天一对象,今天来看看Date对象,相对于时间大家一定很熟悉,应为以前在网站中很多地方都会遇到这样的时间特效.温故而知新,今天我们来回忆一下Date对象. 我们首先来看看他的定义: ...

  3. 用JS的Date对象计算两个时间的时间差

    无意翻到一本相册,耶,这拍的都是什么,啥时候拍的,恩 2010年的,咋看起来这么老,内心的感情戏泛滥,2010年居然是十年前了--接着就萌生了个计算时间差的方法,下回不能让时间过这么快了 先给他找两个 ...

  4. JS学习--Number对象

    一.概述 Number对象是数值对应的包装对象,可以作为构造函数使用,也可以作为工具函数使用. 作为构造函数使用时,它用于生成值为数值的对象. 作为工具函数使用时,它可以将任何类型的值转为数值二.属性 ...

  5. JS学习--Math对象

    Math是 JavaScript 的原生对象,提供各种数学功能.该对象不是构造函数,不能生成实例,所有的属性和方法都必须在Math对象上调用. 一.静态属性 Math对象的静态属性,提供以下一些数学常 ...

  6. Js学习 之 对象冻结

    const 值可以改吗?内存地址保存数据不能改:简单数据(数值.字符串...):数组或者对象=>指针是固定的,里面值可以变 对象冻结->深度冻结 function constTize(ob ...

  7. 在js中Date对象用getDay方法get到的是个啥玩意儿?

    懒得写日期加减的逻辑,于是在网上随便拷贝了个代码进来,结果,我输入2020-04-29,加三个月后get到的却是2020-06-03 开始还没有发现问题在哪,结果是getDay的问题,所以这到底get ...

  8. json Date对象在js中的处理办法

    我们在程序用往往通过ajax方式返回json数据,json中包含Date对象时,在js中是Object对象.可以方式获取: 1.new Date(yourJsonDate.time); //你用你的返 ...

  9. 详解 Date 对象

    JS使用Date对象来处理日期和时间 五种调用Date函数的方式 Date() 单纯的作为函数调用,传入的参数会被忽略,返回当前日期和时间的字符串表示. new Date() 作为构造函数调用. 返回 ...

最新文章

  1. MULLS:一种基于多尺度线性最小二乘的激光SLAM算法
  2. c++ 暂停功能_app下载功能背后的逻辑
  3. 线程函数的设计以及MsgWaitForMultipleObjects函数的使用要点
  4. sql serve 数据库游标的使用
  5. 第十届 蓝桥杯样题 —— 信用卡号验证
  6. 腾讯首位T17级科学家诞生!
  7. Base PyQt4, Simple Web APP Framwork
  8. (转微软网站)如何安装 Microsoft Dynamics CRM 4.0 具有最低必需权限
  9. Android工程的编译过程
  10. 本表收录的字符的Unicode编码范围为19968至40869
  11. 利用python处理dna序列_科学网-简单的Python脚本提取对应位置基因序列(fasta文件)-王彬忠的博文...
  12. win7操作系统练习题(带答案,有问题可直接在博客或公众号中问)
  13. php+log+iis,利用nxlog以syslog方式发送iis日志
  14. 起点不高,又很迷茫怎么办
  15. 盘点史上最经典的电影台词
  16. Flowable流程设计器的使用
  17. IBM developerWorks 技术主题 Linux 文档库
  18. c语言用函数求和与差,编写程序计算输入的两个实数的和与差.要求自定义一个函数]...
  19. 什么情况下mysql innodb会发生回表操作?
  20. 春节倒计时,让我来秀一手:用Python制作一个对联生成器

热门文章

  1. SQL SERVER 里的 try catch
  2. cleaning selected projects has encountered a problem errors occurred during build
  3. ubuntu下创建图标
  4. OpenCV cv2.putText实现字符串换行'\n'
  5. FLutter入门:异步加载组件FutureBuilder
  6. python 字典添加元素
  7. Scrapy学习-24-集成elasticsearch
  8. Hql 中 dao 层 以及daoimpl 层的代码,让mvc 模式更直观简洁
  9. 【数据结构】用栈解决表达式求值问题
  10. Delphi Menu Designer(菜单设计器)之一