3

可能重复:
通过从 Javascript 中的特定日期减去 X 天数来查找日期

我有一个jQuery datepicker,它允许用户从任何给定的一周中选择一个星期五。我想根据那个星期五填充字段,并输入周一至周四的日期。

即用户选择即将到来的星期五(2012 年 10 月 26 日),我想从一天中减去 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

要从现有日期中减去一天,只需减去一天中的毫秒数。

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 的解决方案在大多数情况下都会起作用,但是在假设一天中的秒数时,您可能会遇到 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 回答