我想让我的代码工作,如果我选择一周的任何日期,它将返回该星期一上一个星期一的日期。 例如:如果我选择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日回归。 对这个问题有什么帮助吗? 提前致谢
答案 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
的构造函数中提供任何值,它使用今天的日期。所以你从今天开始减去。
如果您以同样的方式构建d
和newDate
,它会按预期工作:
var d = new Date('2013-02-19');
var newDate = new Date('2013-02-19');
答案 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);