近日做一個招標的項目,發布項目時需要指定有效期,前后端都驗證一下,而在前端驗證的時候遇到了問題,相同日期的不同格式的得到的時間戳不一樣,比如:2020-12-01與2020-12-1得到的結果就不一樣。
好奇之下,我又試了一些其他的個是:
var d1='2020-12-1', //1606752000000 d2='2020-12-01', //1606780800000 d3='2020-09-1', //1598889600000 d4='2020-9-1', //1598889600000 d5='20-09-01', //NaN d6='2020-09-01', //1598918400000 d7='2020/09/01', //1598889600000 d8='2020-09-01', //1598918400000 d9='2020,09,01', //1598889600000 d10='2020,9,1', //1598889600000 d11='2020/9/01', //1598889600000 d12='20/9/1', //NaN d13='20,09,1'; //NaN console.log( new Date(d1).getTime(), new Date(d2).getTime(), new Date(d3).getTime(), new Date(d4).getTime(), new Date(d5).getTime(), new Date(d6).getTime(), new Date(d7).getTime(), new Date(d8).getTime(), new Date(d9).getTime(), new Date(d10).getTime(), new Date(d11).getTime(), new Date(d12).getTime(), new Date(d13).getTime(), );
結果發現采用分隔符/或者,的是一致的,而兩位數年份都是錯誤的。于是查了一下手冊,手冊中也明確說明,應該使用前面兩種分隔符,而不是-或者其他字符。但是,為毛input date獲取到的值時“Y-m-d”這種格式?!
new Date()的正確格式
new Date() ; //參數可以為整數; 也可以為字符串; 但格式必須正確 new Date(2009,1,1); //正確 new Date("2009/1/1"); //正確 new Date("2009-1-1"); //錯誤 new Date( year, month, date, hrs, min, sec) 按給定的參數創建一日期對象 參數說明: year的值為:需設定的年份-1900。例如需設定的年份是1997則year的值應為97,即1997-1900的結果。所以Date中可設定的年份最小為1900; month的值域為0~11,0代表1月,11表代表12月; date的值域在1~31之間; hrs的值域在0~23之間。從午夜到次日凌晨1點間hrs=0,從中午到下午1點間hrs=12; min和sec的值域在0~59之間。 year只能取fullYear,如Date day=new Date(20,12,1); 也是錯誤的
無奈之下只好想辦法統一格式,因需要input date的值可以直接獲?。ㄊ怯眠B字符-分割的),當前日期需要程序獲取,我就還采用連字符,只要統一日期為兩位數就是正確的,所以只需補零。
//日期補零函數 function formatDate(date){ date+='';//注意這里,因為傳過來的本身是一個數字,不能用length獲取長度。這里有幾種做法,一種如我這里,加個字符串就變成字符串了,還有var new String(date)強制轉換成字符串,當然還可以判斷其是否小于10,小于10補零即可 if(date.length<2){ return '0'+date; }else{ return date; } }完整代碼如下:
var etime=new Date(_etime).getTime(),//_etime是用戶通過input date選取的日期 date=new Date(); var now=date.getFullYear()+'-'+formatDate(date.getMonth()+1)+'-'+formatDate(date.getDate()); now=new Date(now).getTime(); var days=(etime-now)/86400000; if(days<=7){ alert('有效期不能少于7天!'); return false; }else if(days>60){ alert('有效期不能超過60天!'); return false; }
© 致遠 2020-12-02,原創內容,轉載請注明出錯:js時間戳問題,js new Date()的正確格式