Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS日期问题,添加1周_Javascript_Date - Fatal编程技术网

Javascript JS日期问题,添加1周

Javascript JS日期问题,添加1周,javascript,date,Javascript,Date,我有一个问题,想知道是否有人可以给我一个小的见解,为什么。以下代码正在为日期添加一周: while (c.getStamp() < b.getStamp()) { var f = this.getWeek(c); e.push(f); c = (c.getStamp() + 604800).toDate(); } ... Date.prototype.getStamp = function() { return Math.round(this.getTi

我有一个问题,想知道是否有人可以给我一个小的见解,为什么。以下代码正在为日期添加一周:

while (c.getStamp() < b.getStamp()) {
    var f = this.getWeek(c);
    e.push(f);
    c = (c.getStamp() + 604800).toDate();
}

...

Date.prototype.getStamp = function() {
    return Math.round(this.getTime() / 1e3);
};

Number.prototype.toDate = function() {
    return new Date(this * 1e3);
};
while(c.getStamp()
我试图让以下各项发挥作用,但它会创建一个连续的循环:

while (c.getStamp() < b.getStamp()) {
    var f = this.getWeek(c);
    e.push(f);
    c = new Date(c.getFullYear(), c.getMonth(), c.getDate + 7, 0, 0, 0);
}
while(c.getStamp()
其中
c=JS日期,即2012年1月5日
b=JS日期,即2012年5月31日
您错过了
c.getDate
之后的
()

除此之外,您可以这样做:

c.setTime(c.getTime()+7*24*60*60*1000); // adds 1 week to the date

Kolink给出了正确的答案,但是如果您在处理日期和格式化日期方面做了大量工作,那么您可能还想看看日期库

要将一周添加到日期,最简单的方法是添加7天:

var now = new Date();

// add one week exactly
now.setDate(now.getDate() + 7);
如果以毫秒为单位添加7*24小时的等效值,则如果一周跨越夏令时边界,则不正确。上面的代码更清楚一些

在代码中:

> while (c.getStamp() < b.getStamp()) { 
更高效,更不容易出错,更不容易写

>      var f = this.getWeek(c);  
什么是
f
f.getWeek
返回什么

>      e.push(f);
>      c = (c.getStamp() + 604800).toDate();   
假设您希望在c中添加一周,因此:

  c.setDate(c.getDate() + 7);
后来

>    c = new Date(c.getFullYear(), c.getMonth(), c.getDate + 7, 0, 0, 0);
> --------------------------------------------------------^
您有语法错误,并且没有将毫秒归零。这似乎是一种更为冗长的方式,从一周到
c
,见上文

其中c=JS日期,即2012年1月5日,b=JS日期,即2012年1月5日

请注意,在国际论坛上,应避免使用或解释特定于区域的表达方式。以上是否为美国特定的mm/dd/yyyy格式?更广泛认可的格式是dd/mm/yyyy,或者更好地使用ISO8601格式:yyy-mm-dd(所有兼容ES5的浏览器都应该支持这种格式,但它们都还没有)

哦,
getStamp
toDate
方法似乎是在尝试四舍五入到最接近的秒。您可以尝试一个只需一次即可完成此功能的函数:

Date.prototype.roundToSecond = function() {
  this.setMilliseconds(this.getMilliseconds() > 499? 1000 : 0);
}

哇,我从来没有见过有人在不玩代码高尔夫时使用
1e3
。作为一个注释可能会更好。如果它显示一个代码示例,这将是一个很好的答案,这将说明为什么这是一个非常好的库
Date.prototype.roundToSecond = function() {
  this.setMilliseconds(this.getMilliseconds() > 499? 1000 : 0);
}