百科狗-知识改变命运!
--

Date - JavaScript Date 对象

乐乐1年前 (2023-11-21)阅读数 10#技术干货
文章标签对象

Date

创建一个 JavaScript Date实例,该实例呈现时间中的某个时刻。Date对象则基于 Unix Time Stamp,即自1970年1月1日(UTC)起经过的毫秒数。

实例化Date对象

创建一个新Date对象的唯一方法是通过new操作符:

let now = new Date();

只能将Date作为构造函数调用,才能实例化(instantiate)Date对象:若将它作为常规函数调用(即不加new操作符),则将会返回一个字符串,而非Date对象。另外,不像其他的 JavaScript 对象类型,Date对象没有字面量语法(literal syntax)。

语法

new Date();
new Date(value);
new Date(dateString);
new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);

参数

注意参数monthIndex是从“0”开始计算的,这就意味着一月份为“0”,十二月份为“11”。

注意:当Date作为构造函数调用并传入多个参数时,如果数值大于合理范围时(如月份为 13 或者分钟数为 70),相邻的数值会被调整。比如 new Date(2013, 13, 1)等于new Date(2014, 1, 1),它们都表示日期2014-02-01(注意月份是从0开始的)。其他数值也是类似,new Date(2013, 2, 1, 0, 70)等于new Date(2013, 2, 1, 1, 10),都表示同一个时间:2013-03-01T01:10:00

注意:当Date作为构造函数调用并传入多个参数时,所定义参数代表的是当地时间。如果需要使用世界协调时 UTC,使用new Date(Date.UTC(...))和相同参数。

Date()构造函数有四种基本形式

没有参数

如果没有提供参数,那么新创建的Date对象表示实例化时刻的日期和时间。

Unix时间戳

value一个 Unix 时间戳( Unix Time Stamp),它是一个整数值,表示自1970年1月1日00:00:00 UTC(the Unix epoch)以来的毫秒数,忽略了闰秒。请注意大多数 Unix 时间戳功能仅精确到最接近的秒。

时间戳字符串

dateString表示日期的字符串值。该字符串应该能被Date.parse()正确方法识别(即符合 IETF-compliant RFC 2822 timestamps 或 version of ISO8601)。

Date - JavaScript Date 对象

注意:由于浏览器之间的差异与不一致性,强烈不推荐使用Date构造函数来解析日期字符串(或使用与其等价的Date.parse)。对 RFC 2822 格式的日期仅有约定俗称的支持。对 ISO 8601 格式的支持中,仅有日期的串(例如"1970-01-01")会被处理为 UTC 而不是本地时间,与其他格式的串的处理不同。

分别提供日期与时间的每一个成员

当至少提供了年份与月份时,这一形式的Date()返回的Date 对象中的每一个成员都来自下列参数。没有提供的成员将使用最小可能值(对日期为1,其他为0)。

year表示年份的整数值。 0到99会被映射至1900年至1999年,其它值代表实际年份。参见示例。monthIndex表示月份的整数值,从 0(1月)到 11(12月)。day可选表示一个月中的第几天的整数值,从1开始。默认值为1。hours可选表示一天中的小时数的整数值(24小时制)。默认值为0(午夜)。minutes可选表示一个完整时间(如 01:10:00)中的分钟部分的整数值。默认值为0。seconds可选表示一个完整时间(如 01:10:00)中的秒部分的整数值。默认值为0。milliseconds可选表示一个完整时间的毫秒部分的整数值。默认值为0。

简介

  • 如果没有输入任何参数,则Date的构造器会依据系统设置的当前时间来创建一个Date对象。
  • 如果提供了至少两个参数,其余的参数均会默认设置为 1(如果没有指定 day 参数)或者 0(如果没有指定 day 以外的参数)。
  • JavaScript的时间由世界标准时间(UTC)1970年1月1日开始,用毫秒计时,一天由 86,400,000 毫秒组成。Date对象的范围是-100,000,000 天至 100,000,000 天(等效的毫秒值)。
  • Date对象为跨平台提供了统一的行为。时间属性可以在不同的系统中表示相同的时刻,而如果使用了本地时间对象,则反映当地的时间。
  • Date对象支持多个处理 UTC 时间的方法,也相应地提供了应对当地时间的方法。UTC,也就是我们所说的格林威治时间,指的是time中的世界时间标准。而当地时间则是指执行JavaScript的客户端电脑所设置的时间。
  • 以一个函数的形式来调用Date对象(即不使用new操作符)会返回一个代表当前日期和时间的字符串。

属性

Date.prototype允许为Date对象添加属性。Date.lengthDate.length的值是 7。这是该构造函数可接受的参数个数。

方法

Date.now()返回自 1970-1-1 00:00:00 UTC(世界标准时间)至今所经过的毫秒数。Date.parse()解析一个表示日期的字符串,并返回从 1970-1-1 00:00:00 所经过的毫秒数。

注意:由于浏览器差异和不一致,强烈建议不要使用Date.parse解析字符串。

Date.UTC()接受和构造函数最长形式的参数相同的参数(从2到7),并返回从 1970-01-01 00:00:00 UTC 开始所经过的毫秒数。

JavaScript Date实例

所有的Date实例都继承自Date.prototype。修改Date 构造函数的原型对象会影响到所有的Date实例。

Date.prototype 方法

Getter

Date.prototype.getDate()根据本地时间返回指定日期对象的月份中的第几天(1-31)。Date.prototype.getDay()根据本地时间返回指定日期对象的星期中的第几天(0-6)。Date.prototype.getFullYear()根据本地时间返回指定日期对象的年份(四位数年份时返回四位数字)。Date.prototype.getHours()根据本地时间返回指定日期对象的小时(0-23)。Date.prototype.getMilliseconds()根据本地时间返回指定日期对象的毫秒(0-999)。Date.prototype.getMinutes()根据本地时间返回指定日期对象的分钟(0-59)。Date.prototype.getMonth()根据本地时间返回指定日期对象的月份(0-11)。Date.prototype.getSeconds()根据本地时间返回指定日期对象的秒数(0-59)。Date.prototype.getTime()返回从1970-1-1 00:00:00 UTC(协调世界时)到该日期经过的毫秒数,对于1970-1-1 00:00:00 UTC之前的时间返回负值。Date.prototype.getTimezoneOffset()返回当前时区的时区偏移。Date.prototype.getUTCDate()根据世界时返回特定日期对象一个月的第几天(1-31).Date.prototype.getUTCDay()根据世界时返回特定日期对象一个星期的第几天(0-6).Date.prototype.getUTCFullYear()根据世界时返回特定日期对象所在的年份(4位数).Date.prototype.getUTCHours()根据世界时返回特定日期对象当前的小时(0-23).Date.prototype.getUTCMilliseconds()根据世界时返回特定日期对象的毫秒数(0-999).Date.prototype.getUTCMinutes()根据世界时返回特定日期对象的分钟数(0-59).Date.prototype.getUTCMonth()根据世界时返回特定日期对象的月份(0-11).Date.prototype.getUTCSeconds()根据世界时返回特定日期对象的秒数(0-59).Date.prototype.getYear()根据特定日期返回年份(通常 2-3 位数).使用getFullYear().

Setter

Date.prototype.setDate()根据本地时间为指定的日期对象设置月份中的第几天。Date.prototype.setFullYear()根据本地时间为指定日期对象设置完整年份(四位数年份是四个数字)。Date.prototype.setHours()根据本地时间为指定日期对象设置小时数。Date.prototype.setMilliseconds()根据本地时间为指定日期对象设置毫秒数。Date.prototype.setMinutes()根据本地时间为指定日期对象设置分钟数。Date.prototype.setMonth()根据本地时间为指定日期对象设置月份。Date.prototype.setSeconds()根据本地时间为指定日期对象设置秒数。Date.prototype.setTime()通过指定从 1970-1-1 00:00:00 UTC 开始经过的毫秒数来设置日期对象的时间,对于早于 1970-1-1 00:00:00 UTC的时间可使用负值。Date.prototype.setUTCDate()根据世界时设置 Date 对象中月份的一天(1 ~ 31)。Date.prototype.setUTCFullYear()根据世界时设置 Date 对象中的年份(四位数字)。Date.prototype.setUTCHours()根据世界时设置 Date 对象中的小时(0 ~ 23)。Date.prototype.setUTCMilliseconds()根据世界时设置 Date 对象中的毫秒(0 ~ 999)。Date.prototype.setUTCMinutes()根据世界时设置 Date 对象中的分钟(0 ~ 59)。Date.prototype.setUTCMonth()根据世界时设置 Date 对象中的月份(0 ~ 11)。Date.prototype.setUTCSeconds()根据世界时设置 Date 对象中的秒钟(0 ~ 59)。Date.prototype.setYear()setYear()方法用于设置年份。请使用setFullYear()方法代替。

Conversion getter

Date.prototype.toDateString()以人类易读(human-readable)的形式返回该日期对象日期部分的字符串。Date.prototype.toISOString()把一个日期转换为符合 ISO 8601 扩展格式的字符串。Date.prototype.toJSON()使用toISOString()返回一个表示该日期的字符串。为了在JSON.stringify()方法中使用。Date.prototype.toGMTString()返回一个基于 GMT(UT)时区的字符串来表示该日期。请使用toUTCString()方法代替。Date.prototype.toLocaleDateString()返回一个表示该日期对象日期部分的字符串,该字符串格式与系统设置的地区关联(locality sensitive)。Date.prototype.toLocaleFormat()使用格式字符串将日期转换为字符串。Date.prototype.toLocaleString()返回一个表示该日期对象的字符串,该字符串与系统设置的地区关联(locality sensitive)。覆盖了Object.prototype.toLocaleString()方法。Date.prototype.toLocaleTimeString()返回一个表示该日期对象时间部分的字符串,该字符串格式与系统设置的地区关联(locality sensitive)。Date.prototype.toSource()返回一个与Date等价的原始字符串对象,你可以使用这个值去生成一个新的对象。重写了Object.prototype.toSource()这个方法。Date.prototype.toString()返回一个表示该日期对象的字符串。覆盖了Object.prototype.toString()方法。Date.prototype.toTimeString()以人类易读格式返回日期对象时间部分的字符串。Date.prototype.toUTCString()把一个日期对象转换为一个以UTC时区计时的字符串。Date.prototype.valueOf()返回一个日期对象的原始值。覆盖了Object.prototype.valueOf()方法。

例子

>例子:创建一个日期对象的几种方法

下例展示了用来创建一个日期对象的多种方法。

注意:由于浏览器差异和不一致性,强烈建议不要使用Date构造函数(和Date.parse,它们是等效的)解析日期字符串。

var today = new Date();
var birthday = new Date('December 17, 1995 03:24:00');
var birthday = new Date('1995-12-17T03:24:00');
var birthday = new Date(1995, 11, 17);
var birthday = new Date(1995, 11, 17, 3, 24, 0);

例子:将两位数年份映射为 1900 - 1999 年

为了创建和获取 0 到 99 之间的年份,应使用Date.prototype.getFullYear()方法。

var date = new Date(98, 1); // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT)

// 已弃用的方法, 同样将 98 映射为 1998
date.setYear(98);           // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT)

date.setFullYear(98);       // Sat Feb 01 0098 00:00:00 GMT+0000 (BST)

例子:计算经过的时间

下例展示了如何以毫秒精度计算两个日期对象的时间差:

由于不同日期、月份、年份长度的不同(日期长度不同来自夏令时的切换),使用大于秒、分钟、小时的单位表示经过的时间会遇到很多问题,在使用前需要经过详尽的调研。

// 使用 Date 对象
var start = Date.now();

// 调用一个消耗一定时间的方法:
doSomethingForALongTime();
var end = Date.now();
var elapsed = end - start; // 以毫秒计的运行时长
// 使用内建的创建方法
var start = new Date();

// 调用一个消耗一定时间的方法:
doSomethingForALongTime();
var end = new Date();
var elapsed = end.getTime() - start.getTime(); // 运行时间的毫秒值
// to test a function and get back its return
function printElapsedTime (fTest) {
    var nStartTime = Date.now(),
        vReturn = fTest(),
        nEndTime = Date.now();
    alert("Elapsed time: " + String(nEndTime - nStartTime) + " milliseconds"); 
    return vReturn;
}
yourFunctionReturn = printElapsedTime(yourFunction);

注意:在支持Web Performance API的高精细度(high-resolution)时间功能的浏览器中,Performance.now()提供的所经过的时间比Date.now()更加可靠、精确。

获取自 Unix 起始时间以来经过的秒数

var seconds = Math.floor(Date.now() / 1000);

注意此处需要返回一个整数(仅做除法得到的不是整数),并且需要返回实际已经经过的秒数(所以这里使用了Math.round()).

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)