【问题标题】:Current Date converted to 10 days before and 10 days after当前日期转换为前 10 天和后 10 天
【发布时间】:2020-08-19 14:31:53
【问题描述】:

我有这段代码,我将当前日期转换为这种格式 2020-08-20 。但是我该如何更改它以给我今天 10 天 from 和今天 10 天 before 的日期。

例如今天是2020-08-20我想从今天起10天2020-08-30

这是我的代码

const dateConverter = (dateIn) => {
        var year = dateIn.getFullYear();
        var month = dateIn.getMonth() + 1; // getMonth() is zero-based
        var day = dateIn.getDate();
        return year + "-" + month.toString().padStart(2, "0") + "-" + day.toString().padStart(2, "0");
      }
      
      var today = new Date();
      console.log(dateConverter(today));

【问题讨论】:

    标签: javascript datetime


    【解决方案1】:

    这有点棘手。首先将日期的小时数设置为 12,以避免夏季/冬季时间变化的问题。然后使用getDate 为额外的天数加 10,setDate 为新值。现在您有了一个以毫秒为单位的值,从中生成一个新日期以获取一个日期对象。对于第二个日期减去 20 天,因为原始日期已被之前的操作更改,其他所有操作都相同。

    使用getFullYeargetMonthgetDate 格式化日期的输出 .因为月份是在 JS 中处理的,从 0 到 11 加 1 个月。月份和日期可以是 1 位数,但您希望它是 2 位数,因此在字符串 "0" 之前添加并使用 slice 获取它的最后 2 个字符。
    对两个日期进行格式化并将它们作为数组返回。

    const dateConverter = (dateIn) => {
        dateIn.setHours(12);
        let dateIn10days = new Date(dateIn.setDate(dateIn.getDate() + 10));
        let dateFor10days = new Date(dateIn.setDate(dateIn.getDate() - 20));
        
        let strIn10Days = dateIn10days.getFullYear() + '-' + ('0' +(dateIn10days.getMonth()+1)).slice(-2) + '-' + ('0' + dateIn10days.getDate()).slice(-2);
        let strFor10Days = dateFor10days.getFullYear() + '-' + ('0' +(dateFor10days.getMonth()+1)).slice(-2) + '-' + ('0' + dateFor10days.getDate()).slice(-2);
        return [strFor10Days, strIn10Days];
    }
          
    let today = new Date();
    console.log(dateConverter(today));

    【讨论】:

      【解决方案2】:

      此代码将帮助您

      参考JavaScript calculating date from today date to 7 days before

      10 天后只需将 - 转换为 +

          const dateConverter = (dateIn) => { 
               var dates ={};
      
               var days = 10; // Days you want to subtract
      
      
      
               for(let i=0;i<days;i++){
      
      
                 var date = dateIn;
      
                 var last = new Date(date.getTime() - (i * 24 * 60 * 60 * 1000));
      
                 var day = last.getDate();
      
                 var month= last.getMonth()+1;
      
                 var year= last.getFullYear();
      
                 dates[i] =  year + "-" + month.toString().padStart(2, "0") + "-" +                             day.toString().padStart(2, "0");
      
      
               }
      
      
                return dates
      
            }
            
            var today = new Date();
            console.log(dateConverter(today));
             

      【讨论】:

      • 你只给了9天后(今天是第10天)。你没有注意夏季/冬季的时间变化:试试var today = new Date(2020,9,30,23,15);,如果你生活在一个变化的时区,你会得到"2020-10-25"两次。
      【解决方案3】:

      试试这个

      const dateConverter = (dateIn) => {
          var year = dateIn.getFullYear();
          var month = dateIn.getMonth() + 1; // getMonth() is zero-based
          var day = dateIn.getDate();
          return year + "-" + month.toString().padStart(2, "0") + "-" + day.toString().padStart(2, "0");
      }
      
      var today = new Date();
      var numberOfDaysToAdd = 10;
      var tenDaysPlus = today.setDate(today.getDate() + numberOfDaysToAdd); 
      console.log(dateConverter(today));
      
      
      var today = new Date();
      var numberOfDaysToSubtract = 10;
      var tenDaysMinus = today.setDate(today.getDate() - numberOfDaysToSubtract); 
      console.log(dateConverter(today));
      

      【讨论】:

        【解决方案4】:

        我建议你使用 moment 库,但你仍然想要纯 javascript

        const convert = (date) => {
         const pastDate = new Date(date)
         pastDate.setDate(pastDate.getDate() - 10); 
         const futureDate = new Date(date)
         futureDate.setDate(futureDate.getDate() + 10); 
         return { pastDate, futureDate } 
        }
        

        使用任意日期调用转换函数。

        【讨论】:

          【解决方案5】:

          我以前也一直在搞砸。 但是在这个 Stack Overflow 上,你可以找到一个非常好的答案: Add days to JavaScript Date

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

          这是从该帖子中获取的代码。

          对于减去天数,只需将“+天”替换为“-天”

          希望这能解决您的问题!

          【讨论】:

            【解决方案6】:

            您可以将所有日期转换为timestamp,然后简单地用它们计算:

            const dateTimestamp = new Date("2020-10-10").getTime()
            const milisecondsInADay = 60*60*24*1000
            const milisecondsInTenDays = milisecondsInADay * 10
            const beforeDate = new Date(dateTimestamp - milisecondsInTenDays)
            const afterDate = new Date(dateTimestamp + milisecondsInTenDays)
            console.log("before", beforeDate)
            console.log("after", afterDate)
            console.log("initially", new Date(dateTimestamp))

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-08-16
              • 2011-04-24
              相关资源
              最近更新 更多