文章目錄
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