3

重複の可能性:
Javascriptの特定の日付からX日数を引いて日付を検索する

ユーザーが任意の週から金曜日を選択できるjQuery日付ピッカーがあります。その金曜日に基づいてフィールドにデータを入力し、月曜日から木曜日までの日付も入力したいと思います。

つまり、ユーザーが今週の金曜日(10-26-2012)を選択し、その日から1を引いて木曜日の日付を取得し、次に水などを取得したいと思います。

これにどのようにアプローチしますか?

    $(document).ready(function(){
        $("#friDate").Zebra_DatePicker({
            format: 'm-d-Y',
            disabled_dates: ['* * * 0-4,6'],
            first_day_of_week: 0,
            onSelect: function(){
                var date = $("#friDate").val();
                $("#mon").val('INSERT MON DATE');
                $("#tue").val('INSERT TUE DATE');
                $("#wed").val('INSERT WED DATE');
                $("#thu").val('INSERT THU DATE');
                $("#fri").val(date);                    
            }
        });
    });

どんな助けでも大歓迎です!ありがとう :)。

4

2 に答える 2

5

既存の日付から1日を引くには、1日のミリ秒数を引くだけです。

var today = new Date();
var yesterday = new Date(today.getTime() - 1000*60*60*24);

// As pointed out by Waxen, we need to account for daylight savings changes
function addDays(date, days) {
    var newDate = new Date(date.getTime() + (1000*60*60*24*days) );
    // To account for daylight savings differences
    // The hours won't be the same when crossing the daylight savings changes
    var hourDifference =  newDate.getHours() - date.getHours();
    var msInHour = 60*60*1000;
    if (hourDifference > 0) {
        newDate = new Date(newDate.getTime() + msInHour) ;
    } else if (hourDifference < 0){
        newDate = new Date(newDate.getTime() - msInHour) ;    
    }    
    return newDate;    
}

したがって、コードについては、次のようにすることができます

$("#mon").val(addDays(date, -4));
$("#tue").val(addDays(date, -3));
$("#wed").val(addDays(date, -2);
$("#thu").val(addDays(date, -1));
$("#fri").val(date);             

更新私のコードは機能しますが、Waxenのソリューションはより単純であり、それを使用します。この答えは参考のためにここに残しておきます

于 2012-10-23T19:54:06.633 に答える
2

Juanの魂はほとんどの場合機能しますが、1日の秒数を想定すると、DSTでいくつかの問題が発生する可能性があります。彼のaddDays関数の次の代替実装を使用することをお勧めします。

function addDays(date, days) {
    var new_date = new Date( date.getTime() );
    new_date.setDate( new_date.getDate() + days );
    return new_date;
}
于 2012-10-23T20:11:42.357 に答える