我正在尝试计算下一个生日的剩余天数,但一直遇到问题。这是到目前为止的代码(如果您的生日已经是今年等,则会出现负面日期的问题)。关于如何解决这个问题的任何提示?
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;
答案 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()函数用于获取大于或等于给定数字的最小整数。