Html5日期控制问题:在12月的特定日期添加3天会以js的形式返回下个月的1月

时间:2016-12-01 08:50:02

标签: javascript

我有一个日期对象,我根据用户从下拉日历中选择的值进行设置。我想为所选的一个添加3天。除了 12月之外,它在所有月份都能正常运行。如果我从12月开始选择特定日期并添加3天,则返回的月份值为" 00 "而不是" 12 "。

这是我的代码。

var dateinput= document.getElementById("date_picker").value;
      console.log(dateinput);
      var timeinput= document.getElementById("time_picker").value;
      var dateobj = dateinput + ' ' +timeinput;
      var parts = dateobj.split(/[-\s:]/);
      var date  = new Date(parts[0],parts[1],parts[2],parts[3],parts[4]);
      console.log(parts[1])
      date.setDate( date.getDate() + 3);
      console.log(date)


      var dateobj2 = [date.getMonth(), date.getDate(), date.getFullYear()].map(pad).join('/') +
               ' ' + [date.getHours(),date.getMinutes()].map(pad).join(':');

2 个答案:

答案 0 :(得分:1)

以下代码输出http://prntscr.com/ddyjy3

<!doctype html>
<html>
  <head>
    <title>Date Demo</title>
    <style>
ol {
  display: inline-block;
  list-style-type: none;
}

li {
  display: block;
  border: 1px solid green;
  padding: 5px;
}
    </style>

  </head>
  <body>
    <ul id="demo"></ul>

<script>
// set start date from your date picker
// set daysToAdd to 3 to return next 3days from the selected date
function showDates(startDate, daysToAdd) {
    var aryDates = [];

    for (var i = 0; i < daysToAdd; i++) {
       var currentDate = new Date();
       currentDate.setDate(startDate.getDate() + i);
       var fullDate = currentDate.getDate() + "/" + (currentDate.getMonth() + 1) + "/" + currentDate.getFullYear();
       aryDates.push('<li class="pick-date" data-date="' + fullDate + '"> ' + currentDate.getDate() + ' <span class="day">' + DayAsString(currentDate.getDay()) + '</span> ('+ fullDate +')</li>');
    }

    return aryDates;
}

function DayAsString(dayIndex) {
    var weekdays = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
    return weekdays[dayIndex];
}

var startDate = new Date();// document.getElementById('date_picker').value
var aryDates = showDates(startDate, 7);
document.getElementById("demo").innerHTML = aryDates.join(" ");


</script>

    </body>
</html>

答案 1 :(得分:1)

基本上,月份将从11 (Dec)开始到12。因此,当用户在12月输入new Date(year, month, day, hours, minutes, seconds, milliseconds)时,应将其减去1,以便在将组件分配到var date = new Date(parts[0], parts[1]-1, parts[2], parts[3], parts[4]); 时获得11。

所以你的代码将成为,

function getDate() {

      var dateinput= document.getElementById("date_picker").value;
      var timeinput= document.getElementById("time_picker").value;
      var dateobj = dateinput + ' ' +timeinput;
      var parts = dateobj.split(/[-\s:]/);
      var date  = new Date(parts[0], parts[1]-1, parts[2], parts[3], parts[4]);
      date.setDate( date.getDate() + 3);
      console.log(date);
}

您可以查看以下代码段

&#13;
&#13;
<input type="date" id="date_picker" />
<input type="text" id="time_picker" />
<input type="button" value="Get Date" onclick="getDate()" />
<br/>
&#13;
JSON
&#13;
&#13;
&#13;

相关问题