代码之家  ›  专栏  ›  技术社区  ›  Jimmy

从日期起删除1个月的问题-获取第0个月[重复]

  •  0
  • Jimmy  · 技术社区  · 6 年前

    这个问题已经有了答案:

    我有一个很好用的代码。它以特定格式给我今天的日期。

    function fetchTime() {
      var today = new Date();
      var dd = today.getDate();
      var mm = today.getMonth() + 1;
      var yyyy = today.getFullYear();
      if (dd < 10) {
        dd = '0' + dd;
      }
      if (mm < 10) {
        mm = '0' + mm;
      }
      var today = yyyy + '-' + mm + '-' + dd;
      return (today);
    }
    

    我还想把今天的日期减一个月。我以为这很简单,我刚去掉了+1。所以我有这个代码:

    function fetchTime() {
      var today = new Date();
      var dd = today.getDate();
      var mm = today.getMonth();
      var yyyy = today.getFullYear();
      if (dd < 10) {
        dd = '0' + dd;
      }
      if (mm < 10) {
        mm = '0' + mm;
      }
      var today = yyyy + '-' + mm + '-' + dd;
      return (today);
    }
    

    这给了我2019-00-17年的产量,应该是2018-12-17年。

    有人能告诉我怎么做吗?我的问题是以所需的格式输出日期,而我看到的大多数示例都没有将正确的格式作为日期更改的一部分输出。

    5 回复  |  直到 6 年前
        1
  •  0
  •   Learning2Code    6 年前

    我会把格式和提取区分开。您可以使现有的格式化函数接受一个默认为Today的可选参数,这样您就可以像调用今天的日期一样调用它。

     function formatTime(date) {
      var dateToFormat = date || new Date();
      var dd = dateToFormat.getDate();
      var mm = dateToFormat.getMonth() + 1;
      var yyyy = dateToFormat.getFullYear();
      if (dd < 10) {
        dd = '0' + dd;
      }
      if (mm < 10) {
        mm = '0' + mm;
      }
    
      return (yyyy + '-' + mm + '-' + dd);
    }
    

    那么你也可以用今天的日期减去一个月或任何其他日期来称呼它。

        formatTime(); //will default to today
        var today = new Date();
        formatTime(addMonths(today,-1)); //format last month's date
    

    正如robg在评论中指出的,您需要实现addmonths函数,如 Adding months to a Date in JavaScript

    function addMonths(date, months) {
      var d = date.getDate();
      date.setMonth(date.getMonth() + +months);
      if (date.getDate() != d) {
        date.setDate(0);
      }
      return date;
    }
    
        2
  •  0
  •   Carlos Vieira    6 年前

    对于moment.js中的减法:

    Moment()。减去(1,'月')。

    文档: http://momentjs.com/docs/#/manipulating/subtract/

        3
  •  0
  •   user10923772    6 年前

    您应该通过获取当前月份来减去月份,然后减去您想要的月份数,然后像这样更新日期变量。

    function fetchTime() {
      var today = new Date();
      today.setMonth(today.getMonth() - 1);
      var dd = today.getDate();
      var mm = today.getMonth() + 1;
      var yyyy = today.getFullYear();
      if (dd < 10) {
        dd = '0' + dd;
      }
      if (mm < 10) {
        mm = '0' + mm;
      }
      var today = yyyy + '-' + mm + '-' + dd;
      return (today);
    }
    
        4
  •  0
  •   Tyler Roper    6 年前

    因为你想要的格式是 ISO 8601 日期,您可以使用javascript .toISOString . 不过,您只关心前10个字符(而不是 时间 ,因此您要添加 .substring(0,10) .

    Date.prototype.toISODateString = function() { return this.toISOString().substring(0,10); }
    Date.prototype.addMonths = function(val) { this.setMonth(this.getMonth()+val); return this;}
    
    var date = new Date();
    var todayFormatted = date.toISODateString();
    console.log(todayFormatted);
    
    var lastMonthFormatted = date.addMonths(-1).toISODateString();
    console.log(lastMonthFormatted);            

    我已将格式化步骤设置为一个名为 toISODateString() 并将其添加到 Date 原型,这是一种奇特的表达方式“你可以链 .toISODateString() 对任何 日期 现在。

    为了把日期改回一个月,我用了 .setMonth() . 我还把它转换成一个函数 addMonths .

        5
  •  0
  •   MarcusVinnicius    6 年前

    使用相同的代码,但删除一个月。例子:

    function fetchTime() {
      var today = new Date();
      today.setMonth(today.getMonth() - 1);
      var dd = today.getDate();
      var mm = today.getMonth() + 1;
      var yyyy = today.getFullYear();
      if (dd < 10) {
        dd = '0' + dd;
      }
      if (mm < 10) {
        mm = '0' + mm;
      }
      var today = yyyy + '-' + mm + '-' + dd;
      return (today);
    }
    
    推荐文章