1

我希望我的代码能够像这样工作,如果我选择一周中的任何日期,它将返回该周前一个星期一的日期。例如:如果我选择 2013 年 1 月 8 日,它将自动返回 2013 年 1 月 7 日。这是我的代码:

var dateValue = document.getElementById("OurDate").value; //OurDate is the textbox where I am giving the date as input
var d = new Date(dateValue);
            var newDate = new Date(); ;
            var day = d.getDay();

            if (day == "0")
            newDate.setDate(d.getDate() - 6);
            else if (day == "1")
            newDate = d;
            else if(day=="2")
            newDate.setDate(d.getDate() - 1);
            else if(day=="3")
            newDate.setDate(d.getDate() - 2);
            else if(day=="4")
            newDate.setDate(d.getDate() - 3);
            else if(day=="5")
            newDate.setDate(d.getDate() - 4);
            else if (day == "6")
            newDate.setDate(d.getDate() - 5);

            alert(newDate);

此代码适用于 1 月的任何日期。但是当我在二月或任何其他月份给出任何日期时。它向我显示一月的日期。例如:如果我选择 2013 年 2 月 19 日,它应该返回 2013 年 2 月 18 日,但它会返回 2013 年 1 月 18 日。对这个问题有什么帮助吗?提前致谢

4

3 回答 3

2

这是因为您正在制作一个新的 Date 对象,而不是使用相同的对象或克隆它:

var d = new Date(dateValue);
var newDate = new Date( +d ); // Cloning d

您可以将整个语句重写为:

var date = new Date();
date.setDate( date.getDate() - date.getDay() + 1 );

console.log( date.getDay() ); // 1
于 2013-01-08T14:50:29.593 回答
1

问题确实出在这一行:

var newDate = new Date(); 

通过在它的构造函数中不提供任何值Date使用今天的日期。所以你从今天减去。

如果您以相同的方式构建两者dnewDate它会按预期工作:

var d = new Date('2013-02-19');
var newDate = new Date('2013-02-19');

现场示例:http: //jsfiddle.net/cS2CC/

于 2013-01-08T14:52:01.243 回答
1

而不是getDate(),使用getDay()

的返回值getDay是一个与星期几对应的整数:0 代表星期日,1 代表星期一,2 代表星期二,以此类推。

然后,您可以使用.setDate()来设置日期:

var date = new Date();
var day = date.getDay();
var days_from_monday = day - 1;

date.setDate(date.getDate() - days_from_monday);

或者更简洁:

var date = new Date();
date.setDate(date.getDate() - date.getDay() + 1);
于 2013-01-08T14:55:17.160 回答