【问题标题】:Finding date by subtracting X number of days from a particular date in Javascript通过从Javascript中的特定日期减去X天数来查找日期
【发布时间】:2009-07-27 12:09:49
【问题描述】:

我想通过从 JavaScript 中的特定日期减去 X 天数来查找日期。我的 JavaScript 函数接受 2 个参数。一个是日期值,另一个是需要减去的天数。

例如,我将我的参数日期传递为 2009 年 7 月 27 日,我将另一个参数传递为 3。所以我想计算 2009 年 7 月 27 日之前 3 天的日期。所以我们应该得到的结果日期是 2009 年 7 月 24 日. 这在 JavaScript 中怎么可能。感谢您的帮助。

【问题讨论】:

    标签: javascript date


    【解决方案1】:

    简单地说:

    yourDate.setDate(yourDate.getDate() - daysToSubtract);
    

    【讨论】:

    • 我认为这行不通,除非当月的当前日期大于您减去的天数。
    • ... 例如,它今天适用于 -3,因为今天是 27 日(在美国,但如果今天是 2 日,您最终会得到新的日期为 -1 和 setDate如果您尝试将月份中的日期设置为负数,将会死掉。
    • @all:这适用于所有情况。如果 setDate 得到一个负值,那么它会按照您的希望将日期设置回上个月。这比以毫秒为单位减去天要容易得多。
    • 这并不适用于所有情况。请参阅灰烬星期三示例:stackoverflow.com/questions/9036838/…
    • 嗨,Ron...Ash Wednesday 示例的代码包含解释不良结果的逻辑错误。它从复活节日期减去 1 个月,然后减去 46 天,而作者只打算减去 46 天。因此,他在 12 月获得灰烬星期三等。
    【解决方案2】:
    function date_by_subtracting_days(date, days) {
        return new Date(
            date.getFullYear(), 
            date.getMonth(), 
            date.getDate() - days,
            date.getHours(),
            date.getMinutes(),
            date.getSeconds(),
            date.getMilliseconds()
        );
    }
    

    【讨论】:

    • 这行得通,恕我直言,这是最好的答案。如果我在一个月的 31 日加上 7 天,其他每个人都会返回 38。谢谢!
    • 这种方法已被证明对我来说更可靠 - 它返回一个 Date 对象,其中接受的答案给了我一个 Int
    • 如果你在一个月的第一天,你减去天数,结果变成负数,会发生什么? Date 处理吗?
    • 当接受的答案失败时,这也对我有用
    • 我会赞成这个答案,但我有一个严格的个人政策,即从不赞成仅代码的答案——它们是不良答案发布实践的榜样。当新用户看到来自高代表用户的纯代码回答可以获得独角兽积分时,他们认为这样做是可以的。如果此答案有所改进,请联系我,以便我投票。
    【解决方案3】:

    永远不要寻求这种解决方案 yourDate.setDate(yourDate.getDate() - daysToSubtract);

    如果您的日期是任何一个月的 1 日,并且您想删除某些日子,比如 1,它就不起作用。

    请选择以下始终有效的解决方案

    var newDate = new Date(yourDate.getTime() - (days * 24 * 60 * 60 * 1000));

    【讨论】:

    • 这是迄今为止我发现的最好和最简单的解决方案,它可以处理所有其他人似乎都忽略的边界情况。谢谢!
    • 大多数日期都有时区,对于某些跨越夏令时的值,此解决方案可能会失败。这是一个常见的错误,因为简单的测试不会显示问题,例如读取输入 type=date 可能会导致问题,因为它意外地具有时区和时间。要以毫秒为单位来操纵时间值而不导致出现奇怪的错误真的很困难。
    【解决方案4】:

    我在这里再发布一个答案,它将以特定格式返回日期。

    首先你可以得到当前日期10/08/2013如下

    function Cureent_Date() {
        var today_GMT = new Date();
        var dd = today_GMT.getDate();
        var mm = today_GMT.getMonth() + 1; //January is 0!
        var yyyy = today_GMT.getFullYear();
        if (dd < 10) {
            dd = '0' + dd
        }
        if (mm < 10) {
            mm = '0' + mm
        }
        current_date = mm + '/' + dd + '/' + yyyy;
        alert("current_date"+current_date);
    
        Back_date();
    }
    

    现在返回基于 X 天的日期

    function Back_date()
    {    
        var back_GTM = new Date(); back_GTM.setDate(back_GTM.getDate() - 2); // 2 is your X
        var b_dd = back_GTM.getDate();
        var b_mm = back_GTM.getMonth()+1;
        var b_yyyy = back_GTM.getFullYear();
        if (b_dd < 10) {
            b_dd = '0' + b_dd
        }
        if (b_mm < 10) {
            b_mm = '0' +b_mm
        }
    
        var back_date=  b_mm + '/' + b_dd + '/' + b_yyyy;
        alert("back_date"+back_date);
    }
    

    所以,今天是10/08/2013,所以它会返回10/06/2013

    Check Live Demo here 希望这个答案对您有所帮助。

    【讨论】:

      【解决方案5】:

      这是一个示例,但这并没有进行任何检查(例如,如果您在 2009/7/1 使用它,它将使用负数或抛出错误。

      function subDate(o, days) {
      // keep in mind, months in javascript are 0-11
      return new Date(o.getFullYear(), o.getMonth(), o.getDate() - days);;
      }
      

      【讨论】:

      • 这似乎也有效(至少在 Safari 中)。我很惊讶接受的答案有效。显然,它将调整月/年以返回有效日期:例如,Date(2009, 6, 0) 变为 Date(2009, 5, 30)。
      • 为我在 Firefox 和 Safari 中工作,包括负数。
      【解决方案6】:

      这就是我要做的。请注意,您可以简化表达式,我刚刚写出来是为了清楚表明您将天数乘以一天中的毫秒数。

       var newDate = new Date( yourDate.getTime() - (days * 24 * 60 * 60 * 1000) );
      

      【讨论】:

      • 不要这样做;改用天数。这可能会导致遵守夏令时的地方出现错误。例如,Mar 14 2011 减去 1*24*60*60*1000 对我来说是 Mar 12 2011
      • 已确认。这种方法(错误地或至少意外地)在 DST 开始时减少了一个额外的小时。
      【解决方案7】:

      只是另一种选择,我写的:

      DP_DateExtensions Library

      如果您只想进行一次计算,这可能有点过头了,但如果您要进行更多的日期操作,您可能会发现它很有用。

      支持日期/时间格式、日期数学(加/减日期部分)、日期比较、日期解析等。

      【讨论】:

      • 似乎对我有用......我在日志中看不到任何内容 - 你还在吗?错误是什么?谢谢。
      【解决方案8】:

      这是参考上面的答案 检查这个小提琴

      https://jsfiddle.net/uniyalguru/azh65aa0/

      function Cureent_Date() {
      var today_GMT = new Date();
      var dd = today_GMT.getDate();
      var mm = today_GMT.getMonth() + 1; //January is 0!
      var yyyy = today_GMT.getFullYear();
      if (dd < 10) {
          dd = '0' + dd
      }
      if (mm < 10) {
          mm = '0' + mm
      }
      current_date = mm + '/' + dd + '/' + yyyy;
      

      【讨论】:

        【解决方案9】:

        我创建了一个日期操作函数。您可以添加或减去任意天数、小时数、分钟数。

        function dateManipulation(date, days, hrs, mins, operator) {
            date = new Date(date);
            if (operator == "-") {
               var durationInMs = (((24 * days) * 60) + (hrs * 60) + mins) * 60000;
               var newDate = new Date(date.getTime() - durationInMs);
            } else {
               var durationInMs = (((24 * days) * 60) + (hrs * 60) + mins) * 60000;
               var newDate = new Date(date.getTime() + durationInMs);
            }
           return newDate;
        }
        

        现在,通过传递参数来调用这个函数。例如,这里有一个函数调用,用于获取从今天起 3 天之前的日期。

        var today = new Date();
        var newDate = dateManipulation(today, 3, 0, 0, "-");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-07
          • 1970-01-01
          • 2010-11-20
          相关资源
          最近更新 更多