用Javascript计算距离下一个生日的剩余天数

用Javascript计算距离下一个生日的剩余天数,javascript,datetime,Javascript,Datetime,我试图计算下一个生日之前的剩余天数,但总是遇到问题。这是到目前为止的代码(如果你的生日已经是今年了,那么在消极的日子里会有一些问题)。关于如何解决这个问题有什么建议吗 var birthdayDate = new Date(year, month-1, day, 12); var now = new Date(); var days = 0; Math.floor(days = ( (birthdayDate.getTime() - now.getTime()

我试图计算下一个生日之前的剩余天数,但总是遇到问题。这是到目前为止的代码(如果你的生日已经是今年了,那么在消极的日子里会有一些问题)。关于如何解决这个问题有什么建议吗

    var birthdayDate = new Date(year, month-1, day, 12);
    var now = new Date();

    var days = 0;

    Math.floor(days = ( (birthdayDate.getTime() - now.getTime())  / (1000*60*60*24)));      


    if(days < 0)        
    {
        var yearDiff = birthdayDate.getYear() - now.getYear();
        yearDiff *= -1; 

        var monthDiff = birthdayDate.getMonth() - now.getMonth();

        var daysDiff = birthdayDate.getDay() - now.getDay();


        if(monthDiff <= 0)
        {
            if(daysDiff > 0)
            {
            }

            else
            {
                days += 365;
            }
        }

        var extraDays = yearDiff / 4;
        days = days + (yearDiff * 365) + extraDays;                
    } 

    else
    {
        throw new FutureDateException();
    }


    days = Math.floor(Math.round(days));

    if(days === 365)
    {
        days = 0;
    }

    if(days === 366)
    {
        days = 1;
    }

    return days;
var birthdayDate=新日期(年、月、日、12);
var now=新日期();
风险值天数=0;
floor(days=((birthdayDate.getTime()-now.getTime())/(1000*60*60*24));
如果(天数<0)
{
var yearDiff=birthdayDate.getYear()-now.getYear();
yearDiff*=-1;
var monthDiff=birthdayDate.getMonth()-now.getMonth();
var daysDiff=birthdayDate.getDay()-now.getDay();
如果(月日期0)
{
}
其他的
{
天数+=365天;
}
}
var extraDays=年差异/4;
天数=天数+(年差*365)+额外天数;
} 
其他的
{
抛出新的FutureDateException();
}
天=数学地板(数学圆(天));
如果(天数===365)
{
天数=0;
}
如果(天数===366)
{
天数=1天;
}
返程天数;

我会这样做:

var myBirthday, today, bday, diff, days;
myBirthday = [6,2]; // 6th of February
today = new Date();
bday = new Date(today.getFullYear(),myBirthday[1]-1,myBirthday[0]);
if( today.getTime() > bday.getTime()) {
    bday.setFullYear(bday.getFullYear()+1);
}
diff = bday.getTime()-today.getTime();
days = Math.floor(diff/(1000*60*60*24));
alert(days+" days until Niet's birthday!");

对于JS中的任何日期计算,我建议使用库。JS有非常奇怪的日期/时间概念:)

要返回正确的天数

无论夏令时如何,请使用Math.round而不是Math.floor

并将两个日期和时间设置为午夜

function daysUntilNext(month, day){
    var tday= new Date(), y= tday.getFullYear(), next= new Date(y, month-1, day);
    tday.setHours(0, 0, 0, 0);
    if(tday>next) next.setFullYear(y+1);
    return Math.round((next-tday)/8.64e7);
}

//test 1
var d= daysUntilNext(12, 25); 
if(d=== 0) alert('Merry Christmas!');
else alert(d+' day'+(d>1? 's': '')+' until Christmas');

//test2
var d= daysUntilNext(4, 26); 
if(d=== 0) alert('Happy Birthday!');
else alert(d+' day'+(d>1? 's': '')+' until your birthday');

vijay生日以天计算

功能生日(月、日){
var manos=新日期(),
vijay=manos.getFullYear(),
下一个=新日期(vijay,月-1,天);
设定时间(0,0,0,0);
如果(manos>next)next.setFullYear(vijay+1);
返回数学圆((下一个-manos)/8.64e7);
}
var vajasan=海磷灰石(06,22);
if(vajasan==0)console.log('Happy birth Thalapathy!');
else console.log(vajasan+‘day’+(vajasan>1‘s’:“”)+‘ToGo-thalapathy生日’
今天=新日期();
var bday=新日期(今天.getFullYear(),11,25);
如果(today.getMonth()==11&&today.getDate()>25)
{
bday.setFullYear(bday.getFullYear()+1);
}  
var一天=1000*60*60*24;
log(Math.ceil((bday.getTime()-today.getTime())/(一天))+
“离生日还有几天!”;
说明:

getFullYear()方法用于根据本地时间获取指定日期的年份。该方法返回的值是一个绝对数。对于1000年和9999年之间的日期,getFullYear()返回一个四位数字,例如1985年

getMonth()方法用于根据本地时间获取指定日期内的月份,以零为基础。getMonth()返回的值是一个介于0和11之间的整数。0对应于1月,1对应于2月,依此类推

getDate()方法用于根据本地时间获取指定日期的月份日期。getDate()返回的值是1到31之间的整数

getTime()方法用于根据通用时间获取指定日期的时间对应的数值


Math.ceil()函数用于获取大于或等于给定数字的最小整数。

这对我来说更具可读性diff/(1000*60*60*24)rest看起来不错。@SubirKumarSao做了一些整理,包括你的建议。虽然这个代码片段可以解决问题,但确实有助于提高你文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满你的代码,这会降低代码和解释的可读性!
function daysUntilNext(month, day){
    var tday= new Date(), y= tday.getFullYear(), next= new Date(y, month-1, day);
    tday.setHours(0, 0, 0, 0);
    if(tday>next) next.setFullYear(y+1);
    return Math.round((next-tday)/8.64e7);
}

//test 1
var d= daysUntilNext(12, 25); 
if(d=== 0) alert('Merry Christmas!');
else alert(d+' day'+(d>1? 's': '')+' until Christmas');

//test2
var d= daysUntilNext(4, 26); 
if(d=== 0) alert('Happy Birthday!');
else alert(d+' day'+(d>1? 's': '')+' until your birthday');