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 月のどの日付でも正常に機能します。しかし、私が2月または他の月に日付を指定するとき。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今日の日付が使用されます。だからあなたは今日から引いています。

dと の両方をnewDate同じ方法で構築すると、期待どおりに動作します。

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 に答える