2012-03-23 57 views
2

所以,我知道这可能是一个常见问题,但我似乎无法解开它在我脑海中。日期和Javascript

在Javascript中,我试图创建一个倒数计时器,而不使用作弊(意思是借用某人的脚本),因为我们的婚礼日期正好在九月份。

我知道了将日子转换成月和日是多么困难。

对那些数学大师来说,是否有可能在JavaScript中定义每个月并使用它来倒计时,然后跟进if语句,如果日期过去了,这是多少天过去了。我喜欢数学,但我似乎无法弄清楚这个公式,这令我很沮丧。

9月22日是一天。

我知道这段文字的写作时间有183天。我也手算日子来验证。我可以通过公式向我展示这一点。

但是如果我每个月都定义一次以及该月的天数,它会是一个冗长的“if语句”,包括所有月份吗?或者它可能是一个长期的表达?

variable = weddingDate - (?) 

我不需要它写,如果有人可以帮助一些alegbra! :)


编辑

var d1, d2; 

d1 = new Date('3/23/2012'); 
d2 = new Date('9/22/2012'); 

compare = d2-d1 

document.write((compare) /1000/60/60/24); 

所以这天返回的准确数量。这实际上比人们想象的要容易得多。我知道我可以根据个人电脑的日期更改自动更新的d1。

但是,从几天到几个月和几天准确转换的公式是什么?

我知道你可以采取

document.write((compare) /1000/60/60/24); 

,并切换到

document.write(((compare) /1000/60/60/24)/30.4368499); 

然后,我可以一轮这将是6(又名6个月)最近的整数,再减去从总的,留下小数点。那么我可以通过30.4368499倍。但我不确定是否有更好的方法来做到这一点。

+1

恭喜上要结婚了! :-) – 2012-03-23 16:21:59

+1

'variable = weddingDate - Date.now()'应该做的伎俩,如果你让weddingDate日期对象。然后可以操作生成的对象来查找到那之前的日子,月份和时间。 – jzworkman 2012-03-23 16:22:48

+0

@jzworkman:'Date.Now'应该是'Date.now()'。 – 2012-03-23 16:24:00

回答

5

JavaScript Date对象可以为您提供一个值,该值代表日期与过去称为“epoch”的点之间的“距离”。通过减去两个这样的值,然后除以一天中的秒数,就可以得到一个天数。

查找.getTime()方法。 (只需从另一个实际工作中减去一个日期,因为JavaScript的要挟对象,数量和方式Date对象变成一个数字是有效地调用.getTime()

(不写代码,因为你明智的要求只是过程。)

+0

谢谢。尽管如此,我仍然困惑于将日期转换为数月和数天。这个公式是如何创建的? – traveler84 2012-03-23 17:25:56

+2

啊,这是一个不同的故事。这实际上很棘手,因为月份有不同的天数。但是,您可以利用的一件事是,JavaScript Date对象具有“智能”的.setDate方法。如果您将该函数的月份设置为月末之后的一天(如32),则它会转入下一个月。因此,您可以编写一个循环,以增加月份的日期并计算月份值更改的次数! – Pointy 2012-03-23 18:06:08

+0

谢谢。这是有道理的。 – traveler84 2012-03-23 18:34:43

1
var END_TIME = new Date("2012-11-11").getTime(); // replace 2012-11-11 with actual weddding day 
if (new Date().getTime() > END_TIME) { 
    alert("WE MADE IT"); 
} 

欲了解更多信息https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date

+0

虽然这有效,但我试图比较两个日期并将其发布在我的网站上,以便我们可以登录查看剩下多少天。所以我试图从几天转换到几个月和几天。 – traveler84 2012-03-23 17:27:00

0

//月份是tricky-如果你想和天,你会做,现在...

//我认为上每个月的22个月要返回的月数和没有天数等等。

function bigDay(d){ 
    var now= new Date(), 
    days1= now.getDate(), 
    months1= now.getMonth(), 
    days2= d.getDate(), 
    months2= d.getMonth(), 
    days= 0, months= months2-months1, 
    daysinmonth= (new Date(now.getFullYear(), now.getMonth()+1, 0)).getDate(); 
    if(d-now<0) return ''; 
    if(months> 0){ 
     if(days1>days2){ 
      days= (daysinmonth-days1)+days2; 
      --months; 
     } 
     else days= days2-days1; 
    } 
    else days= days2-days1; 
    return months+' months '+(days?' and '+days+' days.': ''); 
} 

警报(bigDay(新日期(2012年,8,22)))

//你可以使用文件撰写或innerHTML的或其他)