联系信息

js时间戳问题,js new Date()的正确格式

2020-12-02 11:50 By 致远 1029
当前位置: 企业网站建设 > Jquery > js时间戳问题,js new Date()的正确格式

近日做一个招标的项目,发布项目时需要指定有效期,前后端都验证一下,而在前端验证的时候遇到了问题,相同日期的不同格式的得到的时间戳不一样,比如:2020-12-01与2020-12-1得到的结果就不一样。

js时间戳错误

好奇之下,我又试了一些其他的个是:

js时间戳错误定义列表


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()的正确格式

留下您的评论

>