JavaScript即学即用教程[4]-日期操作
本文来学习JavaScript内置的类型Date所提供的日期相关的功能。
UTC时间
这个我们可以大概将其理解为格林尼治天文台的标准时间即可。也就是0时区的时间。
他的全称是世界协调时。参考: 协调世界时
时间戳
时间戳(timestamp),一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。使用数字签名技术产生的数据, 签名的对象包括了原始文件信息、 签名参数、 签名时间等信息。广泛的运用在知识产权保护、 合同签字、 金融帐务、 电子报价投标、 股票交易等方面
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数
前端日期传递给服务器保存时,一般用日期对象的时间戳形式,因数据库中也是以number时间戳的形式存储时间的。
注意了,时间戳的单位是 “秒”。
而在JavaScript当中,Date.now(), (new Date().getTime()) 获取到的是1970起始到现在的毫秒数, 因此JS中一般要做除以1000的处理:
1 | Math.round(new Date().getTime() / 1000) |
后端传来的时间戳如何转换为日期对象呢?
1 | var a = new Date(timeStamp) |
不过要注意,服务端传来的是秒还是毫秒,并做对应的处理即可。
JavaScript API
获取当前日期的js日期对象
1 | var today = new Date(); |
第三个构造函数,如果不传月份就用一月,如果不传日,则用一号,时分秒不传则是0:0:0
举例:1
new Date(2015,7,20,14,57,11) // 返回 2015-08-20T06:57:11.000Z, 其实会返回一个日期对象,打印的这个值只是UTC时间而已。
js日期对象内部存储的月份,是比我们通常认为的月份小1个月。
原型方法
get相关
1 | Date.prototype.getFullYear // 年 |
set相关
1 | Date.prototype.setFullYear // 年 |
setDate是支持设置超过30天的,当你设置的天超过一个月份时,则日期对象会自动推导成下个月。
setHours同理,设置超过24小时,也可以智能推导。
日期格式化
Date有些跟本地时区有关的toString方法,如:1
2Date.prototype.toLocaleDateString()
Date.prototype.toLocaleString()
分别表示:
- 返回一个表示该日期对象日期部分的字符串,该字符串格式与系统设置的地区关联(locality sensitive)。
- 返回一个表示该日期对象的字符串,该字符串与系统设置的地区关联(locality sensitive)
为了更加精准,跟平台无关,我们需要自己实现这个格式化方法:1
2
3
4
5
6
7
8var formatDate(date) {
return date.getFullYear() + '-'
+ padding(date.getMonth() + 1) + '-'
+ padding(date.getDate()) + ' '
+ padding(date.getHours()) + ':'
+ padding(date.getMinutes()) + ':'
+ padding(date.getSeconds());
}
对于个位数的月份,我们通常需要补0的操作。这里给出2种padding填补的实现:
1 | 方法1: |
第二种看起来思路比较666,不过相对于第一种存在内存空间浪费的情况。因为做字符串拼接创建了一次新字符串,slice又创建了一次新字符串。而方法1创建了一个返回字符串,甚至在v小于10的时候并不需要创建额外的新字符串。
获取某月份的天数
利用浏览器的智能推导。上文讲到了,如果设置一个日子超过当前月份天数,则Date对象会自动设置为下个月推导出来的天数。
同样,如果我设置一个月的第0天,则浏览器Date对象会自动设置为上个月的最后一天。
利用该原理,可以将日期设置下一个月的第0天,从而日期对象会自动设置为上个月的最后一天,从而得到了最后一天的日期,即是月份中的总天数。
例如: var a = new Date(2015,2,0)
相当于设置了一个日期对象为 2015年3月的第0天。
则实际上该日期对象内部存储为: 2015-02-27T16:00:00.000Z。 因此,可知2015年2月共有27天。
函数实现:
1 | var getDays (year, month) { |
广告Time
waiting