文章目录
1. Bug
不要这样写new Date('2019-3-5')
,会出bug。这个String格式为YYYY-M-D。
在iOS手机和safari浏览器上,这个格式会报错,改为YYYY-MM-DD,即new Date('2019-03-05')
是可以的,用/也是可以的,即new Date('2019/3/5')
。
下图为Safari的结果:
但是,有一些资料提到用’-'连接的日期字符串在IE上转换会失败,试过之后发现并不会,不确定是不是因为IE版本问题。
建议
(1) 日期字符串用/的格式
不管是YYYY/MM/DD还是YYYY/M/D,都可。
var str = '2019-3-5';
str = str.split('-').join('/'); //或: str.replace(new RegExp(/-/g),'/')
var date = new Date(str);
(2) 使用moment.js日期处理类库
2. Date对象
(1) 构造函数
注意:构造函数返回的都是Date对象。
[1] new Date()
返回本地日期和时间的Date对象
new Date() //=> Thu Mar 07 2019 11:31:45 GMT+0800 (China Standard Time)
[2] new Date(毫秒时间戳)
参数:毫秒时间戳(表示从1970/01/01 00:00:00为起点的毫秒数)。注意,要加上本地所在时区,因为北京是东八区,所以起始时间是1970/01/01 08:00:00
返回:Date对象
new Date(0) //=> Thu Jan 01 1970 08:00:00 GMT+0800 (China Standard Time)
[3] new Date(日期字符串)
由上文,推荐日期字符串的格式为:YYYY/MM/DD hh:mm:ss
返回Date对象
new Date('2019/03/07 07:05:01') //=> Thu Mar 07 2019 07:05:01 GMT+0800 (China Standard Time)
(2) 实例方法
Date对象的实例方法主要分为2种形式:本地时间和UTC时间。例如:
var date = new Date(); //=> Thu Mar 07 2019 14:08:04 GMT+0800 (China Standard Time)
date.getHours(); //=> 14
date.getUTCHours(); //=> 6
下面列举几个容易混淆的:
- getDate():返回Date对象的月份中的日期值,范围是1~31
- getDay():返回Date对象的一周中的星期值,0为星期天,1为星期一,依次类推
- getTime():返回Date对象与’1970/01/01 00:00:00’之间的毫秒值(北京时间的时区为东8区,起点时间实际为:‘1970/01/01 08:00:00’)
- valueOf():返回 Date 对象的原始值(毫秒值),和getTime()一样
var date = new Date(); //=> Thu Mar 07 2019 14:25:11 GMT+0800 (China Standard Time)
date.getDate(); //=> 7
date.getDay(); //=> 4
date.getTime(); //=> 1551939911331
date.valueOf(); //=> 1551939911331
(3) 静态方法
[1] Date.now()
返回当前日期和时间的Date对象与’1970/01/01 00:00:00’之间的毫秒值(北京时间的时区为东8区,起点时间实际为:‘1970/01/01 08:00:00’)
这个和new Date()
有什么区别?
Date.now()
返回的是毫秒值;new Date()
返回的是Date对象
Date.now();
//等价于
var date = new Date();
date.getTime();
[2] Date.parse(日期字符串)
把字符串转换为Date对象 ,然后返回此Date对象与’1970/01/01 00:00:00’之间的毫秒值(北京时间的时区为东8区,起点时间实际为:‘1970/01/01 08:00:00’)
Date.parse('2019/03/07'); //=> 1551888000000
//等价于
var date = new Date('2019/03/07');
date.getTime(); //=> 1551888000000
3. Date对象、日期字符串、时间戳之间的转换
上面提到的实例方法,是需要Date对象的实例才可以调用。那不免在Date对象、日期字符串和毫秒上需要进行转换。
(1) Date对象 <=> 日期字符串
Date对象 => 日期字符串
var date = new Date();
date.toDateString(); //=> "Thu Mar 07 2019"
date.toUTCString(); //=> "Thu, 07 Mar 2019 07:55:36 GMT"
date.toLocaleString(); //=> "3/7/2019, 3:55:36 PM"
date.toLocaleDateString(); //=> "3/7/2019"
日期字符串 => Date对象
var date = new Date('2019/03/07'); //=> Thu Mar 07 2019 00:00:00 GMT+0800 (China Standard Time)
(2) Date对象 <=> 时间戳
Date对象 => 时间戳
var date = new Date();
date.getTime(); //=> 1551946333499
date.valueOf(); //=> 1551946333499
时间戳 => Date对象
var date = new Date(1551946333499); //=> Thu Mar 07 2019 16:12:13 GMT+0800 (China Standard Time)
(3) 日期字符串 <=> 时间戳
日期字符串 => 时间戳
Date.parse('2019/03/07') //=> 1551888000000
时间戳 => 日期字符串
var date = new Date(1551888000000);
date.toLocaleDateString(); //=> "3/7/2019"
————
其他日期处理函数请参考:https://blog.csdn.net/joyce_lcy/article/details/85697437