近日做一个招标的项目,发布项目时需要指定有效期,前后端都验证一下,而在前端验证的时候遇到了问题,相同日期的不同格式的得到的时间戳不一样,比如: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的值可以直接获取(是用连字符-分割的),当前日期需要程序获取,我就还采用连字符,只要统一日期为两位数就是正确的,所以只需补零。
//日期补零函数 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()的正确格式