用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');