在Javascript中计算直到下一个生日的剩余天数

时间:2014-01-13 11:31:44

标签: 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())  / (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;

5 个答案:

答案 0 :(得分:3)

我会做这样的事情:

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!");

答案 1 :(得分:0)

// Your birthday
var birthday = new Date(1985, 0, 1);

var today = new Date();

//Set current year or the next year if you already had birthday this year
birthday.setFullYear(today.getFullYear());
if (today > birthday) {
  birthday.setFullYear(today.getFullYear() + 1);
}

//Calculate difference between days
Math.floor((birthday - today) / (1000*60*60*24))

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

答案 2 :(得分:0)

要返回正确的天数,

无论夏令时如何,都使用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');

答案 3 :(得分:0)

生日快乐用天计算

function thalapathyBirthday(month, day) {

  var manos = new Date(),
    vijay = manos.getFullYear(),
    next = new Date(vijay, month - 1, day);

  manos.setHours(0, 0, 0, 0);

  if (manos > next) next.setFullYear(vijay + 1);

  return Math.round((next - manos) / 8.64e7);
}

var vajasan = thalapathyBirthday(06, 22);

if (vajasan === 0) console.log('Happy Birthday Thalapathy!');

else console.log(vajasan + ' day' + (vajasan > 1 ? 's' : '') + ' to go thalapathy birthday');

答案 4 :(得分:-1)

{ type: T; data: TypeOf<T>; }

说明:

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

getMonth()方法用于根据本地时间获取指定日期中的月份(从零开始的值)。 getMonth()返回的值为0到11之间的整数。0对应于1月,1对应于2月,依此类推。

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

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

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