JavaScript引用类型——Date类型

Date类型

Date类型使用自UTC(Coordinated Universal Time,国际协调时间) 1970年1月1日午夜(零食)开始经过的毫秒数来保存日期。在使用这种数据存储格式的条件下,Date类型保存的日期能够精确到1970年1月1日之前或之后的100000000年。
要创建一个日期对象,使用new操作符和Date构造函数即可。如:

var now = new Date();

在调用Date()构造函数而不传递参数的情况下,新创建的对象自动获得当前日期和时间。如果想根据特定的日期和时间创建日期对象,必须传入表示该日期的毫秒数(即从UTC时间1980年1月1日午夜起至改日期经过的毫秒数)。为了简化这一计算过程,ECMAScript提供了两个方法:Date.parse()Date.UTC()

  • Date.parse()方法接收一个表示日期的字符串参数,然后尝试根据这个字符串返回相应日期的毫秒数。ECMA-262没有定义Date.parse()应该支持哪种日期格式,因此这个方法的行为因实现而异,而且通常是因地区而异。如:
  • "月/日/年",如6/14/2014;
  • "英文月名 日,年",如January 12,2013;
  • "英文星期几 英文月名 日 年 时:分:秒 时区",如 Tue May 25 2012 00:00:00 GMT-0700。
  • ISO 8601 扩展格式 YYYY-MM-DDTHH:mm:ss.sssZ(例如 2012-03-12T00:00:00)只有兼容ECMAScript5的实现支持这种格式。

例如,为2004年5月24日创建一个日期对象,可以使用下面的代码:

var someDate = new Date(Date.parse("May 25, 2004"));

如果传入Date.parse()方法的字符串不能表示日期,它会返回NaN。实际上,直接将表示日期的字符串传递给Date构造函数,也会在后台调用Date.parse()。

var someDate = new Date("May 25, 2004");
  • Date.UTC()方法也同样返回表示时期的毫秒数,但它与Date.parse()在构建值时使用不同的信息。Date.UTC()的参数分别是年份、基于0的月份(一月是0,二月是1,以此类推)、月中的哪一天(1到31),小时数(0到23)、分钟、秒以及毫秒数。在这些参数中,只有前两个参数(年和月)是必须的。如果没有提供月中的天数,则假设天数为1;如果省略其它参数,则统统假设为0。如:
//GMT 时间 2000年 1月 1日 午夜零时
var y2k = new Date(Date.UTC(2000,0));
//GMT 时间 2005年 5月 5日 下午5:55:55
var allFives = new Date(Date.UTC(2005, 4, 5, 17, 55, 55));

如同模仿Date.parse()一样,Date构造函数也会模仿Date.UTC(),但有一点明显不同:日期和时间都是基于本地时间而非GMT来创建。不过,Date构造函数接收的参数仍然与Date.UTC()相同。

//本地时间 2000年 1月 1日 午夜零时
var y2k = new Date(2000,0);
//本地时间 2005年 5月 5日 下午5:55:55
var allFives = new Date(2005, 4, 5, 17, 55, 55);
  • ECMAScrit5添加了Date.now()方法,表示调用这个方法时的日期和时间的毫秒数
//取得开始时间
var start = Date.now();
//调用函数
doSomething();
//取得停止时间
var stop = new Date(),
    result = stop - start;

在不支持Date.now()方法的浏览器,使用+操作符获取Date对象的时间戳,也可以达到同样的目的。

//取得开始时间
var start = Date.now();
//调用函数
doSomething();
//取得停止时间
var stop = +new Date(),
    result = stop - start;
  • 1. 继承的方法
    与其他引用类型一样,Date类型也重写了toLocalString()、toString()和valueOf()方法。但这些方法的返回值与其他方法中的不同。
    Date类型的toLocalString()方法会按照于浏览器设置的地区相适应的格式返回日期和时间。toString()方法通常放回带有时区信息的日期和时间。valueOf()方法不返回字符串,返回日期的毫秒表示。可以方便使用比较操作符来比较日期值。
var date1 = new Date(2007,0,1);
var date2 = new Date(2007,1,1);
alert(date1<date2); //true
alert(date1>date2); //false
  • 2. 日期格式化方法
    Date类型还有以下专门用于将日期格式化为字符串的方法,如:
  • toDateString()——以特定与实现的格式显示星期几、月、日和年
  • toTimeString()——以特定与实现的格式显示时、分、秒和时区

  • toLocaleDateString()——以特定与地区的格式显示星期几、月、日和年

  • toLocaleTimeString()———以特定与实现的格式显示时、分、秒

  • toUTCString()——以特定与实现的格式完整的UTC日期

  • 3. 日期/时间组件方法
    直接取得和设置日期值中特定部分的方法。UTC日期值得是在没有时区偏差的情况下(将日期转换为GMT时间)的日期值。

  • getTime():返回表示日期的毫秒数;与valueOf方法返回的值相同
  • setTime(毫米):以毫秒数设置日期,会改变整个日期
  • getFullYear():取得4位数的年份(如2007而非07)
  • getUTCfFullYear():返回UTC日期的4位数年份
  • setFullYear(年):设置日期的年份。传入的年分值必需是4位数字(如2007而非07)
    -setUTCFullYear(年):设置UTC日期的年份。传入的年分值必需是4位数字(如2007而非07)
  • getMonth():放回日期中的月份,0表示一月,11表示十二月
  • getUTCMonth():回UTC日期中的月份,0表示一月,11表示十二月
  • setMonth(月):设置日期的月份,传入的月份值必需大于0,超过11则增加年份
  • setUTCMonth(月):设置UTC日期的月份,传入的月份值必需大于0,超过11则增加年份
  • getDate():返回日期月份中的天数(1到31)
  • getUTCDate():返回UTC日期月份中的天数(1到31)
  • setDate(日):设置日期月份中的天数,如果传入的值超过了该月中应该有的天数,则增加月份
  • setUTCDate(日):设置UTC日期月份中的天数,如果传入的值超过了该月中应该有的天数,则增加月份
  • getDay():返回日期中星期的星期几(0表示星期日,6表示星期六)
  • getUTCDay():返回UTC日期中星期的星期几(0表示星期日,6表示星期六)
  • getHours():返回日期中的小时数(0到23)
  • getUTCHours():返回UTC日期中的小时数(0到23)
  • setHours(时):设置日期中的小时数。传入的值超过23则增加日期的天数
  • setUTCHours(时):设置UTC日期中的小时数。传入的值超过23则增加日期的天数
  • getMinutes():返回日期中的分钟数。(0到59)
  • getUTCMinutes():返回UTC日期中的分钟数。(0到59)
  • setMinutes(分):设置日期中的分钟数。传入的值超过59增加小时数
  • setUTCMinutes(分):设置UTC日期中的分钟数。传入的值超过59增加小时数
  • getSeconds():返回日期中的秒数(0到59)
  • getUTCSeconds():返回UTC日期中的秒数(0到59)
  • setSeconds(秒):设置日期中的秒数。传入的值超过59增加分钟数
  • setUTCSeconds(秒):设置UTC日期中的秒数。传入的值超过59增加分钟数
  • getMilliseconds() : 返回日期的毫秒数
  • getUTCMilliseconde():返回UTC日期的毫秒数
  • setMilliseconds(秒):设置日期的毫秒数
  • setUTCMilliseconds(秒):设置UTC日期的毫秒数
  • getTimezoneOffset():返回本地时间与UTC时间相差的分钟数。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容