【问题标题】:Date issuse while adding 1 day after [duplicate]在[重复]之后添加1天时的日期问题
【发布时间】:2016-07-19 17:13:33
【问题描述】:

我在约会时遇到了一个逻辑问题。

    Date:<input id="txtDate" type="text" />
<input type="button" onclick="getdate()" value="Fill Follow Date" />
Follow Date:<input id="follow_Date" type="text" />

添加脚本

    $(document).ready(function () {
    $('#txtDate').datepicker();
    $('#follow_Date').datepicker();
});

function getdate() {
    var tt = document.getElementById('txtDate').value;

    var date = new Date(tt);
    var newdate = new Date(date);

    newdate.setDate(newdate.getDate());

    var dd = newdate.getDate()+1;
    var mm = newdate.getMonth()+1;
    var y = newdate.getFullYear();

    var someFormattedDate = dd + '-' + mm + '-' + y;
    document.getElementById('follow_Date').value = someFormattedDate;
}

对于今天“31-03-2016”,后续日期显示“32-03-2016”。但它显示 01-04-2016。您是否有任何其他逻辑可以克服此错误。 我们有“makemytrips”酒店页面等选项。 makemytrip.com/hotels 在这里你可以看到 nigths 的数量。我用于我的网站的相同概念

【问题讨论】:

  • newdate.setDate(newdate.getDate() + 1);以后不要加了..
  • 不要使用 Date 构造函数来解析字符串,它非常不可靠。手动解析字符串,使用库或simple function

标签: javascript jquery date


【解决方案1】:

您不是在进行日期加法,而是在进行数字加法。 getDate() 返回31string 数值,如果将其添加 1,您将得到 32,这有什么问题,那么您正在执行一个导致问题的字符串连接.

您可以改为使用datepickerDate api

$(document).ready(function() {
  var $date = $('#txtDate').datepicker();
  var $follow = $('#follow_Date').datepicker();
  $('#fill-follow').click(function() {
    var date = $date.datepicker('getDate');
    if (date) {
      date.setDate(date.getDate() + 1);
      //date.setMonth(date.getMonth() + 1);
      $follow.datepicker('setDate', date)
    }
  });
});
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/redmond/jquery-ui.css" rel="stylesheet" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.js"></script>
Date:
<input id="txtDate" type="text" />
<input type="button" id="fill-follow" value="Fill Follow Date" />Follow Date:
<input id="follow_Date" type="text" />

【讨论】:

  • 是人造丝。我们有“makemytrips”酒店页面等选项。 makemytrip.com/hotels 在这里你可以看到 nigths 的数量。我用于我的网站的相同概念
  • 哇,3 个库完成了一项极其简单的任务。代码在 Chrome 中为我抛出“$ is not defined”。
  • @RobG 如果你看这个问题,OP 已经在使用 jQuery UI...那么为什么不使用这些 api 来完成任务
【解决方案2】:

使用你的逻辑如下

var someDate = new Date();
var numberOfDaysToAdd = 6;
someDate.setDate(someDate.getDate() + numberOfDaysToAdd);

格式化日期:

var dd = someDate.getDate();
var mm = someDate.getMonth() + 1;
var y = someDate.getFullYear();

var someFormattedDate = dd + '/'+ mm + '/'+ y;

【讨论】:

    【解决方案3】:

    你需要给getDate()结果加1,然后调用setDate()就可以了:

    function getdate() {
        var tt = document.getElementById('txtDate').value;
    
        var date = new Date(tt);
        var newdate = new Date(date);
    
        newdate.setDate(newdate.getDate() + 1);
    
        var dd = newdate.getDate();
        var mm = newdate.getMonth() + 1;
        var y = newdate.getFullYear();
    
        var someFormattedDate = dd + '-' + mm + '-' + y;
        document.getElementById('follow_Date').value = someFormattedDate;
    }
    

    另外,阅读您的代码,我想知道您为什么要创建两次日期:

        var date = new Date(tt);
        var newdate = new Date(date);
    

    你不能把这些合并成一行吗?

        var newdate = new Date(tt);
    

    【讨论】:

      猜你喜欢
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      • 1970-01-01
      • 2011-07-05
      • 2014-04-27
      • 2013-07-31
      • 2019-10-30
      相关资源
      最近更新 更多