14.4.4 创建今天以外的一个日期

到目前为止,我们看到了如何使用Date()来捕获访问者的计算机上的当前日期和时间。但是,如果想要创建表示下一个感恩节或下一个元旦的一个Date对象,该怎么办呢?JavaScript允许我们以几种方法来创建表示今天之外的一个日期。如果你想要在两个日期之间进行计算,那么,你可能想要这么做,例如,计算“到新年还有多少天”(参见14.4.3节)。当使用Date()方法的时候,你可以指定未来或过去的一个日期和时间。基本的格式如下:


new Date(year, month, day, hour, minutes, seconds, milliseconds);


例如,要创建一个日期表示2012年元旦正午,可以这样编写代码:


var ny2012=new Date(2012,0,1,12,0,0,0);


这段代码可以解释为,“创建一个新的Date对象表示2012年1月1日中午12点0分0秒0毫秒”。你必须至少提供年份和日期,到那时,如果不需要指定一个具体时间的话,可以省略掉毫秒、秒和分钟等。例如,只是创建一个日期对象表示2012年1月1日,我们可以这样写:


var ny2012=new Date(2012,0,1);


注意:记住,正如14.4.1节所述,JavaScript使用0表示1月,使用1表示2月,依此类推。

创建距离今天一周的一个日期

正如14.3.3节所介绍的,JavaScript解释器实际上把日期当做表示从1970年1月1日经过的毫秒数的数值。创建一个日期的另一种方式,是传递一个值,表示到该日期所经过的毫秒数:


new Date(milliseconds);


因此,创建表示2012年1月1日的一个日期的另一种方法是:


var ny2012=new Date(1325404800000);


当然,我们是人类而不是计算器,因此,你可能不会这样来考虑日期。然而,当你要创建距离某个日期一定时间的一个新的日期的时候,毫秒表示可能很方便。例如,当使用JavaScript设置一个cookie的时候,我们需要指定从访问者的浏览器删除该cookie的一个日期。为了确保这个日期在一星期以后消失,我们需要指定距离今天一周的一个日期:

要创建从现在开始一周以后的一个日期,可以像下面这样做:


var now=new Date();//today

var nowMS=now.getTime();//get#milliseconds for today

var week=10006060247;//milliseconds in one week

var oneWeekFromNow=new Date(nowMS+week);


第1行代码将当前日期和时间存储到一个名为now的变量中。接下来,getTime()方法提取了从1970年1月1日到今天所经过的毫秒数。第3行计算了一周中的总的毫秒数(1000毫秒×60秒×60分钟×24小时×7天)。最后,这段代码通过将一周的毫秒数和今天相加,得到了一个新的日期。