使用Javascript根据未来日期获取之前的日期

4
理想情况下,我想做的是将一个输入框与日期选择器相结合,让用户选择一个未来的日期。例如,在撰写本文时,今天是2013年08月09日,选择07月31日,然后返回该日期。无论选择哪个日期,使用JavaScript的输入框都将默认该值为所选日期值所在周的前一个星期三。
function getWednesday(date) {
    var d = (date.getDay() == 0 ? 6 : date.getDay() - 3);
    date.setTime(date.getTime() - (d * 24 * 60 * 60 * 1000));
    return date;
}

这只会返回当前周的星期三。我理解javascript函数getDay只会返回0-6,表示周日到周六。setTime函数接受自1970年1月1日以来的毫秒数字符串,并将其转换为实际的日期和时间,getTime函数则恰好相反。我不确定我是否采取了正确的方法来解决问题。感谢任何帮助。


1
我删掉了C#/MVC标签 - 我知道你显然在项目中使用它们,但它们与你的问题无关 :) - Moo-Juice
1
有许多出色的日期库,例如DataJS和momentJS,您想将它们合并还是想要一个原始解决方案? - Zeta
你提到的datepicker是jQuery UI datepicker吗?如果是,你应该明确指出,因为许多datepicker都内置了日期解析功能! - adeneo
@adeneo 这是一个jQuery UI日期选择器。但我想使用JavaScript函数,因为我知道有内置函数可以更容易地实现解决方案。 - David Peterson
5个回答

1

好的,这是我能想到的最聪明的方法:

function prevWed(inDate){
  var adder=(3-inDate.getDay());
  var d=new Date(inDate.getFullYear(), inDate.getMonth(), inDate.getDate() + adder - 7);
  return d
}

更小一点:
return new Date(inDate.getFullYear(), inDate.getMonth(), inDate.getDate() + (3-inDate.getDay()) - 7);

这个会起作用吗?

太棒了!我的第一个被选中的答案!谢谢! - alfadog67

0
您可以调整您的函数以包含这个内容:
function getWednesday(date) {
    var d = (date.getDay() == 0 ? 6 : date.getDay() - 3);
    date.setTime(date.getTime() - (d * 24 * 60 * 60 * 1000));
    return new Date(date.getFullYear(), date.getMonth(), date.getDate()-7);
}
alert(getWednesday(new Date()));

我认为那应该可以运作。


不,它不能做到 OP 想要的。如果你对代码进行一些调整(getMonths() 应该为 getMonth()),它会给你 7 月 24 日的日期。 - putvande
哼 - 在w3schools.com的TryIt编辑器中,这个会返回7/31 - 我想知道我是否没有误读OP的请求 - 谢谢指出打字错误 - 今天就是那种日子;-) - alfadog67
@user1182988 在周日会跳转到上一个星期一吗? - David Peterson
是的,我的代码是基于假设编写的:“这将仅返回当前周的星期三。” 如果这是真的,那么函数就会起作用。 - alfadog67

0
var date = new Date();
var wednesday = new Date(date.setDate(date.getDate() - ((date.getDay() == 0 ? 7 : date.getDay()) + 4)));

计算今天是本周的第几天(5)+ 从上周开始到达星期三需要减去的天数。


那么第一天是星期日的月份怎么办? - Zeta

0
            var d = date.getDay();
        if (d == 0) {
            date.setTime((date.getTime() - 604800000) + 86400000 * 3);
            return date;
        }
        else if (d == 1) {
            date.setTime((date.getTime() - 604800000) + 86400000 * 2);
            return date;
        }
        else if (d == 2) {
            date.setTime((date.getTime() - 604800000) + 86400000 );
            return date;
        }
        else if (d == 4) {
            date.setTime((date.getTime() - 604800000) - 86400000 );
            return date;
        }
        else if (d == 5) {
            date.setTime((date.getTime() - 604800000) - 86400000 * 2);
            return date;
        }
        else if (d == 6) {
            date.setTime((date.getTime() - 604800000) - 86400000 * 3);
            return date;
        }
        else date.setTime(date.getTime() - 604800000);
        return date;

这实际上得到了我想要的解决方案,但有点笨拙...哈哈


2
你知道这只是一行代码吗?date.setTime((date.getTime() - 604800000) + 86400000 * (3 - date.getDay()); - Zeta

0

这应该可以让你获取任何给定日期和时间的前一个星期三

演示现场

var x = new Date('8/1/2013') ;
var wed ;
for(var i=7 ; i > 0 ; i--){
    var myday = x.getTime() - (i * 24 * 60 * 60 * 1000) ;
    var d = new Date(myday) ;

    if(!!~String(d).indexOf('Wed')) wed = d  

}
 console.log(wed) ;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接