Javascript日期减法

时间:2013-01-08 14:45:52

标签: javascript html date datetime

我想让我的代码工作,如果我选择一周的任何日期,它将返回该星期一上一个星期一的日期。 例如:如果我选择2013年8月8日,它将自动返回2013年7月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月份的任何日期。但是当我在2月或任何其他月份给出任何日期时。它显示了我1月的日期。 例如:如果我选择2013年第19届,它将于2013年18月18日返回 但它将于2013年1月18日回归。 对这个问题有什么帮助吗? 提前致谢

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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/

答案 2 :(得分: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);