Javascript日期问题

时间:2017-06-27 04:38:24

标签: javascript jquery

日期存在一些问题,预期结果应为1,用户应输入.start_date字段,.end_date字段应根据.days字段更改。日期如何变化但不正确。 例如,今天是6月27日,当.days字段设置为1时,。end_date字段应该是6月28日。然而,结果是6月27日。代码有什么问题。谢谢。

(function($, window, document, undefined) {

  $(".addSkip").click(function() {
    // row instance to use `find()` for the other input classes
    var $row = $(this).closest('tr');

    var date = new Date($row.find(".start_date").val()),
      days = parseInt($row.find(".days").val(), 10);

    if (!isNaN(date.getTime())) {
      date.setDate(date.getDate() + days);

      $row.find(".end_date").val(date.toInputFormat());
    } else {
      alert("Invalid Date");
    }
  });

  Date.prototype.toInputFormat = function() {
    var yyyy = this.getFullYear().toString();
    var mm = (this.getMonth() + 1).toString(); // getMonth() is zero-based
    var dd = this.getDate().toString();
    return yyyy + "-" + (mm[1] ? mm : "0" + mm[0]) + "-" + (dd[0] ? dd : "0" + dd[0]); // padding
  };
})
(jQuery, this, document);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tr>
    <td><input type="date" size="15" name="date[]" class="start_date" \>
      <input type="button" size="10" value="confirm date" class="addSkip"></td>
    <td><input type="text" size="15" name="nextdate[]" class="end_date"  \> </td>
  <td><input type="text" size="3" name="skip[]" class="days" \> </td>

  </tr>
</table>

2 个答案:

答案 0 :(得分:2)

虽然上面的答案解决了问题并且有效,但我建议不要使用日期。

如果您的时区发生变化怎么办?如果有人从不同的时区连接怎么办?

使用moment.js

答案 1 :(得分:0)

您遇到此问题是因为您所处的时区与UTC相差无几小时。

我刚刚将+" 0:00:00"添加到new Date()对象创建中......并修复了它。

var date = new Date($row.find(".start_date").val()+" 0:00:00")

CodePen中查看。