-2

我有这个代码

function myFunction(){
    alert( new Date(getAllTime(2012,12,24)).toString());
}
function getAllTime(y,m,d){
    return getDaysMilisec(getDaysFromYear(y))+getDaysMilisec(getDaysFromMonth(m,y))+getDaysMilisec(d);
}
function getDaysMilisec(d){
    return d*24*60*60*1000;
}
function getDaysFromYear(y){
    return (bisect(y) ? 366 : 365);
}
function bisect(y){ 
    if( (y%4==0 && y%100!=0) || (y%400==0)) return true;
    return false;
}
function getDaysFromMonth(m,y){ 
    if(m==2 && bisect(y)) return 28; 
    if(m==2 && !bisect(y))return 27; 
    if(m==1||m==3||m==5||m==7||m==8||m==10||m==12) return 31; 
    return 30;
}

为什么 myFunction() 打印

1971 年 2 月 26 日星期五 02:00:00 GMT+0200(GTB 标准时间)?

为什么不是 24.12.2012?

4

2 回答 2

1

Date.prototype.toString方法完全返回该格式。JS 的行为符合预期。如果您希望以您所追求的格式返回日期:

var someDate = newDate();
console.log(d.getDate() + '.' + (d.getMonth()+1) + '.' + d.getFullYear());

JavaScript 的 Date 对象起初有点令人困惑(嗯,它总是在某种程度上令人困惑 IMO)。但是MDN可以很快清理很多东西

于 2012-10-22T19:25:38.297 回答
0

new Date(X).toString()将返回从 1970 年 1 月 1 日开始 X 毫秒后的日期。

您的其他函数返回不正确的值,因为它们从不考虑实际日期(例如getDaysFromYear(y),只是一年中的天数,与自 1971 年以来的年数无关)。

于 2012-10-22T19:29:18.567 回答