【问题标题】:how to get Previous Day?如何获得前一天?
【发布时间】:2011-05-11 07:25:46
【问题描述】:

我有日期对象:

dateObj = new Date(年、月、日[、时、分、秒、毫秒])

如何获取 dateObj - 1 天?

【问题讨论】:

    标签: javascript


    【解决方案1】:
    dateObj.setDate(dateObj.getDate()-1);
    

    【讨论】:

    • +1 @Bdfy:“日期”是 JavaScript Date 对象术语,表示“月份中的某天”。即使在本月 1 日,也可以从中减去一个,因为 JavaScript Date 对象对此很聪明。
    • 我只是得到一堆整数
    【解决方案2】:

    减去一天(1000 毫秒 * 60 秒 * 60 分钟 * 24 小时):

    new Date(+new Date(year, month, date[, hours, minutes, seconds, ms] ) - 1000*60*60*24);
    

    【讨论】:

    • getTime() 在做算术运算符时应该被隐式调用:)
    • 如果相关日期没有 24 小时,则有问题。大多数时区每年发生两次...
    • @T.J. - 那么,由于有 2 个凌晨 1:30,我如何准确地表示时钟被调回的一天的凌晨 1:30?
    • @TJ - 显然这没有问题,因为 JS 似乎无法识别时区更改:new Date(+new Date('11/06/2011 00:00:00 GMT')+1000*60*60*24) 由于夏令时,我永远无法让它跳过/减去一个小时(2011 年 11 月 6 日)是下一个夏令时。也尝试了 6 个月以确保)
    • @cwolves:英国的时钟在 2011 年 6 月 11 日不会改变(字符串中的“GMT”很重要,它告诉 JavaScript 应用哪个时区——我们英国人是有点精神分裂并称我们的标准时间为“GMT”)。如果您使用 27/03/2011,您将看到效果:jsbin.com/uvubu3/2 这表明 27/03/2011 的午夜加上 24 小时是 2011 年 3 月 28 日的凌晨 1 点,因为 27 日只有 23 小时。而setDate 则保持在午夜。现在,您要使用哪个取决于您在做什么,但是当我想到“添加一天”时,我通常会考虑“不影响一天中的时间”。
    【解决方案3】:

    一些不会改变原始日期对象的有用函数:

    function prevDate(date) {
      let copy = new Date(date.valueOf());
      return new Date(copy.setDate(copy.getDate() - 1));
    }
    
    function nextDate(date) {
      let copy = new Date(date.valueOf());
      return new Date(copy.setDate(copy.getDate() + 1));
    }
    

    【讨论】:

      【解决方案4】:

      看看moment.js库https://momentjs.com/docs/

      要获得前一天的日期,您只需要做...

      moment().add(-1, 'days');
      

      【讨论】:

        猜你喜欢
        • 2012-02-09
        • 1970-01-01
        • 2023-04-11
        • 1970-01-01
        • 2021-12-19
        • 1970-01-01
        • 1970-01-01
        • 2012-12-01
        • 1970-01-01
        相关资源
        最近更新 更多