8.javascript 时间与日期

学习要点:

1.Date 类型
2.通用的方法
3.格式化方法
4.组件方法

ECMAScript 提供了 Date 类型来处理时间和日期。Date 类型内置一系列获取和设置日期
时间信息的方法。

一.Date 类型

ECMAScript 中的 Date 类型是在早期 Java 中 java.util.Date 类基础上构建的。为此,Date类型使用 UTC (Coordinated Universal Time,国际协调时间[又称世界统一时间]) 1970 年 1 月
1 日午夜(零时)开始经过的毫秒来保存日期。在使用这种数据存储格式的条件下,Date 类型保存的日期能够精确到 1970 年 1 月1 日之前或之后的 285616 年。创建一个日期对象,使用 new 运算符和 Date 构造方法(构造函数)即可。

var box = new Date(); //创建一个日期对象

在调用 Date 构造方法而不传递参数的情况下,新建的对象自动获取当前的时间和日期。

alert(box); //不同浏览器显示不同

ECMAScript 提供了两个方法,Date.parse()和 Date.UTC()。Date.parse()方法接收一个表
示日期的字符串参数,然后尝试根据这个字符串返回相应的毫秒数。ECMA-262 没有定义
Date.parse()应该支持哪种日期格式,因此方法的行为因实现而异,因地区而异。默认通常接收的日期格式如下:

1.'月/日/年',如 6/13/2011;
2.'英文月名 日, 年',如 May 25, 2004;
3.'英文星期几 英文月名 日 年 时:分:秒 时区',如 Tue May 25 2004 00:00:00 GMT-070
alert(Date.parse('6/13/2011')); //1307894400000

如果 Date.parse()没有传入或者不是标准的日期格式,那么就会返回 NaN。

alert(Date.parse()); //NaN

如果想输出指定的日期,那么把 Date.parse()传入 Date 构造方法里。

var box = new Date(Date.parse('6/13/2011'));//Mon Jun 13 2011 00:00:00 GMT+0800
var box = new Date('6/13/2011'); //直接传入,Date.parse()后台被调用

PS:Date 对象及其在不同浏览器中的实现有许多奇怪的行为。其中有一种倾向是将超
出的范围的值替换成当前的值,以便生成输出。例如,在解析“January 32, 2007”时,有的
浏览器会讲其解释为“February 1, 2007”。而 Opera 则倾向与插入当前月份的当前日期。
Date.UTC()方法同样也返回表示日期的毫秒数,但它与 Date.parse()在构建值时使用不同
的信息。(年份,基于 0 的月份[0 表示 1 月,1 表示 2 月],月中的哪一天[1-31],小时数[0-23],
分钟,秒以及毫秒)。只有前两个参数是必须的。如果没有提供月数,则天数为 1;如果省
略其他参数,则统统为 0.

alert(Date.UTC(2011,11)); //1322697600000

如果 Date.UTC()参数传递错误,那么就会出现负值或者 NaN 等非法信息。
alert(Date.UTC()); //负值或者 NaN
如果要输出指定日期,那么直接把 Date.UTC()传入 Date 构造方法里即可。

var box = new Date(Date.UTC(2011,11, 5, 15, 13, 16));

二.通用的方法

与其他类型一样,Date 类型也重写了 toLocaleString()、toString()和 valueOf()方法;但这
些方法返回值与其他类型中的方法不同。

var box = new Date(Date.UTC(2011,11, 5, 15, 13, 16));
alert('toString:' + box.toString());
alert('toLocaleString:' + box.toLocaleString()); //按本地格式输出

PS:这两个方法在不同浏览器显示的效果又不一样,但不用担心,这两个方法只是在
调试比较有用,在显示时间和日期上,没什么价值。valueOf()方法显示毫秒数。

三.日期格式化方法

Date 类型还有一些专门用于将日期格式化为字符串的方法。

var box = new Date();
alert(box.toDateString()); //以特定的格式显示星期几、月、日和年
alert(box.toTimeString()); //以特定的格式显示时、分、秒和时区
alert(box.toLocaleDateString()); //以特定地区格式显示星期几、月、日和年
alert(box.toLocaleTimeString()); //以特定地区格式显示时、分、秒和时区
alert(box.toUTCString()); //以特定的格式显示完整的 UTC 日期。

四.组件方法

组件方法,是为我们单独获取你想要的各种时间/日期而提供的方法。需要注意的时候,
这些方法中,有带 UTC 的,有不带 UTC 的。UTC 日期指的是在没有时区偏差的情况下的
日期值。

alert(box.getTime()); //获取日期的毫秒数,和 valueOf()返回一致
alert(box.setTime(100)); //以毫秒数设置日期,会改变整个日期
alert(box.getFullYear()); //获取四位年份
alert(box.setFullYear(2012)); //设置四位年份,返回的是毫秒数
alert(box.getMonth()); //获取月份,没指定月份,从 0 开始算起
alert(box.setMonth(11)); //设置月份
alert(box.getDate()); //获取日期
alert(box.setDate(8)); //设置日期,返回毫秒数
alert(box.getDay()); //返回星期几,0 表示星期日,6 表示星期六
alert(box.setDay(2)); //设置星期几
alert(box.getHours()); //返回时
alert(box.setHours(12)); //设置时
alert(box.getMinutes()); //返回分钟
alert(box.setMinutes(22)); //设置分钟
alert(box.getSeconds()); //返回秒数
alert(box.setSeconds(44)); //设置秒数
alert(box.getMilliseconds()); //返回毫秒数
alert(box.setMilliseconds()); //设置毫秒数
alert(box.getTimezoneOffset()); //返回本地时间和 UTC 时间相差的分钟数

PS:以上方法除了 getTimezoneOffset(),其他都具有 UTC 功能,例如 setDate()及 getDate()
获取星期几,那么就会有 setUTCDate()及 getUTCDate()。表示世界协调时间。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353