使用Javascript以特定格式回滚日期

使用Javascript以特定格式回滚日期,javascript,Javascript,我不知道如何做这部分,甚至不知道如何把它作为一个问题。我一直在为我的工作做一个项目,在这个项目中,我们有一个开始日期和结束日期,用户可以通过日期选择器输入,也可以在特定的格式要求内键入,然后向我们的数据库发送查询以请求信息。页面加载时,开始日期和结束日期将自动填充,开始日期可追溯到14天,以自动向用户提供两周的信息,除非用户希望获得更多/更少的信息。问题是: 1:两个输入框(当然是html)都在工作,直到10月份,因为这是一个两位数的月份。 2:回滚日期-14给出了一个负数,而不是将日期回滚到9

我不知道如何做这部分,甚至不知道如何把它作为一个问题。我一直在为我的工作做一个项目,在这个项目中,我们有一个开始日期和结束日期,用户可以通过日期选择器输入,也可以在特定的格式要求内键入,然后向我们的数据库发送查询以请求信息。页面加载时,开始日期和结束日期将自动填充,开始日期可追溯到14天,以自动向用户提供两周的信息,除非用户希望获得更多/更少的信息。问题是:

1:两个输入框(当然是html)都在工作,直到10月份,因为这是一个两位数的月份。 2:回滚日期-14给出了一个负数,而不是将日期回滚到9月XX日

我尝试了var StartDay=StartDate.setDate(StartDate.getDate()-14);所有这些都给出了SQL无法识别的日期和时间。所以我想知道如何:

1:让它回滚到正确的日期,然后我可以用它填充框,或者 2:将给定的日期时间重新格式化为yyyy-mm-dd格式

到目前为止,我已经花了一整天的时间寻找答案,我已经找到了很多接近的答案,但并不是我想要的全部

          $(function () {
          $("#StartDate").datepicker({ dateFormat: "yy-mm-dd", changeMonth: true });
          $("#EndDate").datepicker({ dateFormat: "yy-mm-dd", changeMonth: true });

          var StartDate = new Date();
          var StartDay = StartDate.setDate(StartDate.getDate() - 14);

          var StartMonth = StartDate.getMonth() + 1;
          var StartYear = StartDate.getFullYear();

          //if (StartMonth < 10) StartMonth = "0" + Month;
          //if (StartDay < 10) StartDay = "0" + StartDay;
          var StartDateBox = StartDate;


          var EndDate = new Date();
          var EndDay = EndDate.getDate();
          var EndMonth = EndDate.getMonth() + 1;
          var EndYear = EndDate.getFullYear();
          //alert('the new date is ' + EndDay);

          if (EndMonth < 10) EndMonth = "0" + Month;
          if (EndDay < 10) EndDay = "0" + EndDay;

          var EndDateBox = EndYear + "-" + EndMonth + "-" + EndDay;

          $("#StartDate").attr("value", StartDateBox);
          $("#EndDate").attr("value", EndDateBox);
      });
$(函数(){
$(#StartDate”).datepicker({dateFormat:“yy-mm-dd”,changemount:true});
$(“#EndDate”).datepicker({dateFormat:“yy-mm-dd”,changeMonth:true});
var StartDate=新日期();
var StartDay=StartDate.setDate(StartDate.getDate()-14);
var StartMonth=StartDate.getMonth()+1;
var StartYear=StartDate.getFullYear();
//如果(开始月<10)开始月=“0”+个月;
//如果(StartDay<10)StartDay=“0”+StartDay;
var StartDateBox=StartDate;
var EndDate=新日期();
var EndDay=EndDate.getDate();
var EndMonth=EndDate.getMonth()+1;
var EndYear=EndDate.getFullYear();
//警报('新日期为'+EndDay');
如果(EndMonth<10)EndMonth=“0”+月;
如果(EndDay<10)EndDay=“0”+EndDay;
var EndDateBox=EndYear+“-”+EndMonth+“-”+EndDay;
$(“#开始日期”).attr(“值”,开始日期框);
$(“#EndDate”).attr(“value”,EndDateBox);
});
所有标有“结束”的东西都很好。我的问题是14天的倒退。我已经注释掉了“if”,因为这个数字是负数,因此函数崩溃


*编辑真棒!非常感谢,现在我明白了,这更有意义。但是,它被设置为8月,因此它在.getMonth之后缺少+1。我会设法弄明白的。

我会制作一个函数来格式化日期,以重用代码

function formatDate(date) {
    var day = date.getDate();
    var month = date.getMonth() + 1;
    var year = date.getFullYear();

    if (month < 10) month = "0" + month;
    if (day < 10) day = "0" + day;

    return year + "-" + month + "-" + day;
};

$(function () {
    $("#StartDate").datepicker({ dateFormat: "yy-mm-dd", changeMonth: true });
    $("#EndDate").datepicker({ dateFormat: "yy-mm-dd", changeMonth: true });

    var StartDate = new Date();
    StartDate.setDate(StartDate.getDate() - 14);
    var StartDateBox = formatDate(StartDate);

    var EndDate = new Date();
    var EndDateBox = formatDate(EndDate);

    $("#StartDate").attr("value", StartDateBox);
    $("#EndDate").attr("value", EndDateBox);
});
函数格式日期(日期){
var day=date.getDate();
var month=date.getMonth()+1;
var year=date.getFullYear();
如果(月<10)月=“0”+月;
如果(天<10)天=“0”+天;
返回年份+“-”+月份+“-”+天;
};
$(函数(){
$(#StartDate”).datepicker({dateFormat:“yy-mm-dd”,changemount:true});
$(“#EndDate”).datepicker({dateFormat:“yy-mm-dd”,changeMonth:true});
var StartDate=新日期();
StartDate.setDate(StartDate.getDate()-14);
var StartDateBox=格式日期(StartDate);
var EndDate=新日期();
var EndDateBox=格式日期(EndDate);
$(“#开始日期”).attr(“值”,开始日期框);
$(“#EndDate”).attr(“value”,EndDateBox);
});

您的问题到底是什么?您的行
StartDate.setDate(StartDate.getDate()-14)将正确地从日期中减去14。例如,如果日期是10月8日,那么这一行的结果将是9月24日。问题是,如果我使用此版本,它将给出日期,但该日期的格式错误,我也不确定如何按我需要的方式格式化。另一种方法是,只给出一个负数并使函数崩溃。因此,结束框给出了2014-10-08,我需要开始框对SQL进行相同的格式化,以识别它。StartDate.setDate(StartDate.getDate()-14);给我整个星期三2014年9月24日14:30:25 GMT-0400(东部夏时制)。所以我想在把它分解成我需要的东西之后,就是将它重新格式化成与结束框相同的格式。日期对象没有格式。您看到的格式只是日期对象的字符串表示形式。您可以将
StartDate
obejct的格式与设置
EndDate
对象的格式完全相同。如何设置?我以同样的方式设置了开始日期,它给出了2014-10-0-7,因为当时(10月7日-14天)是-7,它没有将日期回滚到9月。我认为您的主要问题是您使用了
setDate
的结果作为您的日期。在我看来,这并没有回报你的期望。请看我的答案。效果很好,非常感谢。一旦我看到了它,现在就有意义了(它不是一直都是这样吗?)很高兴我能帮上忙。是的,这种情况经常发生:)