JavaScript Date
2013-07-03 更新:
为了解决本文中的关于Date的一些坑,我创建了一个项目enhanced-jsdate,非常简单,有CoffeeScript和JavaScript两个版本。
今天工作中遇到JavaScript的Date计算和格式化的问题,顺便整理了一下JavaScript中的Date的相关API,试做简单记录,代码均在Node.js上测试通过。
Date构造函数
1 | // 当前时间 |
除了构造函数外,Date.UTC()
也用于构造日期,但是并不返回Date,而是返回从1970-01-01开始的毫秒数,比如:
1 | // 1328054400100, 即2012-01-01 00:00:00 0100 |
需要注意的是,Date()
函数返回日期字符串,比如:
1 | // date是字符串:'Tue Sep 11 2012 15:34:48 GMT+0800 (中国标准时间)' |
字符串转日期
Date.parse(string)方法并 _不是返回Date,而是返回整数_。
1 | // 1120752000000, 即2005-07-08 |
日期转字符串
1 | toString(); // Tue Sep 11 2012 15:09:01 GMT+0800 |
Get系列方法
Date提供了一系列Get和Set方法,可以获取和设置年份、月份、日期、小时等等信息,并且提供了本地时间和UTC时间两套方案。
获取本地时间方法如下:
1 | var date = new Date(); |
另外,date.getTime()
方法返回从1970-01-01开始到现在的毫秒数。
1 | date.getTime(); // 返回1970年1月1日至今的毫秒数。 |
Get系列获取本地时间的方法和获取UTC时间的方法一一对应,如
1 | date.getUTCDate(); |
Set系列方法
Set系列方法和Get系列方法一一对应,如:
1 | date.setDate(24); |
同样,date.setTime(time)
方法以毫秒数设置Date对象,和new Date(time)
的作用一样。
Date之间的计算
Date之间的计算实际上是毫秒数的计算,加法除外,加法实际上是字符串连接,比如
1 | // Tue Sep 11 2012 15:40:45 GMT+0800 (中国标准时间) |
Date到字符串的自定义格式转换
JavaScript并没有提供像Ruby的strftime()
这样的方法,如果需要某种格式的日期字符串只能自己实现。比如下面方法实现将日期转化成_yyyy-mm-dd_形式的字符串。
1 | Date.prototype.toHyphenDateString = function() { |
如果需要将日期转换为_3天之前_或者_4小时之前_这样的字符串,可以使用JQuery timeago插件。