代码之家  ›  专栏  ›  技术社区  ›  Marc Hjorth

将“日期最小值”设置为始终早于当前日期10天[重复]

  •  1
  • Marc Hjorth  · 技术社区  · 7 年前

    有人知道一种简单的约会方式吗(比如今天)然后回到X天,X月,X年?

    var date = new Date();
    $("#searchDateFrom").val((date.getMonth() -1 ) + '/' + (date.getDate() - 6) + '/' + (date.getFullYear() - 1));
    

    但我得到了一个否定的日期,比如今天的结果是:

    有什么建议吗?

    0 回复  |  直到 9 年前
        1
  •  84
  •   gurvinder372    10 年前

    你只是把数值从一个数字中减去。所以从3(日期)减去6只会返回-3。

    var date = new Date();
    date.setDate( date.getDate() - 6 );
    date.setFullYear( date.getFullYear() - 1 );
    $("#searchDateFrom").val((date.getMonth() ) + '/' + (date.getDate()) + '/' + (date.getFullYear()));
    
        2
  •  19
  •   Phil    10 年前

    正如其他人所说,您要从以下方法返回的数值中减去 date.getDate() ,您需要重置日期变量上的这些值。我已经在下面创建了一个方法来为您执行此操作。它使用 new Date() var newdate = createDate(-6,0,0) . 如果不想将值传递设置为零(或者可以设置默认值)。该方法将为您返回新的日期(在Chrome和Firefox中测试)。

    function createDate(days, months, years) {
            var date = new Date(); 
            date.setDate(date.getDate() + days);
            date.setMonth(date.getMonth() + months);
            date.setFullYear(date.getFullYear() + years);
            return date;    
        }
    
        3
  •  14
  •   FvB    10 年前

    我建议使用MomentJS库。它们使所有与约会的互动都简单得多。

    如果使用Moment,代码将如下所示:

    var today = moment();
    var nextMonth = today.add('month', 1);
    

    你可以在这里找到momentj: http://momentjs.com/

    更新:

    在JavaScript中,Date.getDate()函数返回从1到31的当前日期。你要从这个数字中减去6,现在是这个月的3号。这使值达到-3。

        4
  •  6
  •   N8allan    7 年前

    这是一个纯函数,它接受传入的开始日期,基于Phil的回答:

    function deltaDate(input, days, months, years) {
        var date = new Date(input);
        date.setDate(date.getDate() + days);
        date.setMonth(date.getMonth() + months);
        date.setFullYear(date.getFullYear() + years);
        return date;
    }
    

    e、 g.将一个月前的日期写入控制台日志:

    console.log(deltaDate(new Date(), 0, -1, 0));
    

    请注意,即使你过了月底或年底,这个方法仍然有效。

        5
  •  3
  •   Younes Henni    7 年前

    moment.js 用于时间和日期管理的库。

    import moment = require('moment');
    
    const now = moment();
    
    now.subtract('seconds', 7); // takes 7 seconds of the current time
    now.subtract('days', 7);    // takes 7 days of the current date
    now.subtract('months', 7);  // takes 7 months of the current date
    now.subtract('years', 7);   // takes 7 years of the current date
    
        6
  •  2
  •   Stefano Borzì    6 年前

    我实现了一个类似于 方法 减去 .

    -如果使用Javascript

    function addDate(dt, amount, dateType) {
      switch (dateType) {
        case 'days':
          return dt.setDate(dt.getDate() + amount) && dt;
        case 'weeks':
          return dt.setDate(dt.getDate() + (7 * amount)) && dt;
        case 'months':
          return dt.setMonth(dt.getMonth() + amount) && dt;
        case 'years':
          return dt.setFullYear( dt.getFullYear() + amount) && dt;
      }
    }
    

    let dt = new Date();
    dt = addDate(dt, -1, 'months');// use -1 to subtract 
    

    -如果使用Typescript:

    export enum dateAmountType {
      DAYS,
      WEEKS,
      MONTHS,
      YEARS,
    }
    
    export function addDate(dt: Date, amount: number, dateType: dateAmountType): Date {
      switch (dateType) {
        case dateAmountType.DAYS:
          return dt.setDate(dt.getDate() + amount) && dt;
        case dateAmountType.WEEKS:
          return dt.setDate(dt.getDate() + (7 * amount)) && dt;
        case dateAmountType.MONTHS:
          return dt.setMonth(dt.getMonth() + amount) && dt;
        case dateAmountType.YEARS:
          return dt.setFullYear( dt.getFullYear() + amount) && dt;
      }
    }
    

    let dt = new Date();
    dt = addDate(dt, -1, 'months'); // use -1 to subtract
    

    可选(单元测试)

    我还使用 :

      it('addDate() should works properly', () => {
        for (const test of [
          { amount: 1,  dateType: dateAmountType.DAYS,   expect: '2020-04-13'},
          { amount: -1, dateType: dateAmountType.DAYS,   expect: '2020-04-11'},
          { amount: 1,  dateType: dateAmountType.WEEKS,  expect: '2020-04-19'},
          { amount: -1, dateType: dateAmountType.WEEKS,  expect: '2020-04-05'},
          { amount: 1,  dateType: dateAmountType.MONTHS, expect: '2020-05-12'},
          { amount: -1, dateType: dateAmountType.MONTHS, expect: '2020-03-12'},
          { amount: 1,  dateType: dateAmountType.YEARS,  expect: '2021-04-12'},
          { amount: -1, dateType: dateAmountType.YEARS,  expect: '2019-04-12'},
        ]) {
          expect(formatDate(addDate(new Date('2020-04-12'), test.amount, test.dateType))).toBe(test.expect);
        }
    
      });
    

    // get format date as 'YYYY-MM-DD'
    export function formatDate(date: Date): string {
      const d     = new Date(date);
      let month   = '' + (d.getMonth() + 1);
      let day     = '' + d.getDate();
      const year  = d.getFullYear();
    
      if (month.length < 2)  {
        month = '0' + month;
      }
      if (day.length < 2) {
        day = '0' + day;
      }
    
      return [year, month, day].join('-');
    }
    
        7
  •  1
  •   Alan Gee    7 年前

    这并不能完全回答问题,但对于任何能够计算出他们希望抵消初始日期的天数的人,以下方法将起作用:

    myDate.setUTCDate(myDate.getUTCDate() + offsetDays);
    

    offsetDays可以是正数或负数,对于任何给定的初始日期和任何给定的offset,结果都是正确的。

    推荐文章