【问题标题】:How to get the date 28 days after a given date? [duplicate]如何在给定日期后 28 天获取日期? [复制]
【发布时间】:2017-05-07 06:07:57
【问题描述】:

我有一个YYYY-MM-DD 格式的日期,我想显示从给定日期算起的第 28 天。我尝试了一些方法,但无法修复它。如果可能的话,我想要一个不使用 Moment.js 的解决方案

Jsfiddle

如果没有其他解决方案,有人可以帮我使用 Moment.js 吗?

【问题讨论】:

  • 您应该查看momentjs。由于闰年、月份长度等原因,使用日期很麻烦。他们的库使它变得简单。
  • @Turnip 那不一样
  • 是的..我问的是,我有一个格式为 YYYY-MM-DD 的日期。现在我们如何才能以相同的格式从给定日期获得第 28 天

标签: javascript html angularjs node.js date


【解决方案1】:

这是一个我将其转换为处理日期偏移量的 Date 原型的函数:

Date.prototype.addDays = function(days)
{
    var day = new Date(this.valueOf());
    day.setDate(day.getDate() + days);
    return day;
}


d = new Date
d.addDays(28)

【讨论】:

  • addDays() 是否存在于日期对象上?developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
  • addDays 不是任何 javascript 实现中日期对象的标准方法。所以没有人会有这种方法。
  • @rckrd 我已经编辑了我的帖子。我一定是早先将该函数保存到了我的 Date 原型中。
【解决方案2】:
    var date =new Date("2016-08-30");    
    var newDate = new Date(date.getFullYear(),date.getMonth(),date.getDate()+28)

【讨论】:

【解决方案3】:

所以你基本上想在给定日期上加上 28 天?那么这是给你的。

var d = new Date(2016, 7, 30)  // parsing dates is a different task
// d equals Tue Aug 30 2016 00:00:00 GMT+0200 (CEST)
var offset = 28 * 24 * 60 * 60 * 1000;
var newDate = new Date(d.getTime() + offset)
// newDate equals Tue Sep 27 2016 00:00:00 GMT+0200 (CEST)

如果您还想解析/字符串化您可以使用的日期:

// parse date
var dateStr = '2016-08-30';
var date = new Date(dateStr);

// stringify date
date.toISOString().split('T')[0]

【讨论】:

    【解决方案4】:

    java 脚本:

    var today = new Date();
    var noDaysToAdd = 28;
    someDate.setDate(today() + noDaysToAdd); 
    Formatting to YYYY-MM-DD :
    var dd = someDate.getDate();
    var mm = someDate.getMonth() + 1;
    var y = someDate.getFullYear();
    
    var someFormattedDate = y + '-' + mm + '-' + dd ;
    

    【讨论】:

      【解决方案5】:

      你可以这样做

       var d=new Date("2016-08-30");
       var n=28; //number of days to add. 
       $scope.renewaldate=new Date(d.getFullYear(),d.getMonth(),d.getDate()+n);
      

      JSFIDDLE

      初始化日期变量

      对于 UTC 时间

      使用new Date(Date.UTC(year, month, day, hour, minute, second)),您可以从特定的UTC 时间创建一个日期对象。

      非 UTC

      使用getTimezoneOffset()获取时区,然后设置时间

      var d = new Date(xiYear, xiMonth, xiDate);
      d.setTime( d.getTime() + d.getTimezoneOffset()*60*1000 );
      

      【讨论】:

      • 使用 Date 构造函数(或 Date.parse)解析 ISO 8601 格式的日期可能会导致在格林威治以西时区的用户看来是前一天的日期。
      • @RobG 是的,我同意。我已经更新了我的答案。
      【解决方案6】:

      我建议将您的日期转换为时间戳,添加 100 * 60 * 60 * 24 * 28(28 天中的毫秒数),然后将其转换回人类可读的日期。

      var now = new Date(
        (new Date()).valueOf()
        + 1000 * 60 * 60 * 24 * 28
      )
      

      然后你需要将其格式化为

      console.log(now.getFullYear()
                  + "-"
                  + (now.getMonth() + 1) 
                  + "-"
                  + (now.getDays() + 1)
      )
      

      + 1 是因为 JavaScript 在011 而不是 112 之间给出了日期和月份。

      问题仍然存在,您得到的是5 而不是05,因此您可能需要自己编写一个类似的函数

      function forceTwoDigits(val){
          val = String(val) // Force value to be a string.
          if(val.length == 1) return "0" + val;
          return val; // If it hasn't returned yet
      }
      

      【讨论】:

        猜你喜欢
        • 2020-08-24
        • 1970-01-01
        • 2022-01-26
        • 2019-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多