【问题标题】:How to get "the day before a date" in javascript?如何在javascript中获取“日期前一天”?
【发布时间】:2013-05-06 15:15:41
【问题描述】:

这两个堆栈溢出问题提出了类似的问题,但他们的解决方案似乎对我不起作用: Javascript Yesterday Javascript code for showing yesterday's date and todays date

给定一个日期,我需要前一天(前一天)的日期。这是上面建议的解决方案的小提琴,以及对我不起作用的场景: http://jsfiddle.net/s3dHV/

var date = new Date('04/28/2013 00:00:00');
var yesterday = new Date();
yesterday.setDate(date.getDate() - 1);
alert('If today is ' + date + ' then yesterday is ' + yesterday);

对我来说,提醒

如果今天是 2013 年 4 月 28 日星期日 00:00:00 GMT-0400(东部夏令时间) 那么昨天是 2013 年 5 月 27 日星期一 11:12:06 GMT-0400(东部 日光时间)。

这显然是不正确的。为什么?

【问题讨论】:

  • 该帖子中发布的解决方案与我链接到的解决方案完全相同...
  • 读取 cmets:date.setTime(date.getTime() + 86400000); - venkatagiri
  • 不需要,Pointy 的答案正是我想要的。

标签: javascript


【解决方案1】:

你正在制定一个全新的约会。

var yesterday = new Date(date.getTime());
yesterday.setDate(date.getDate() - 1);

这会让你成为第一次约会的副本。当您致电setDate() 时,它只会影响当月的某天,而不是整个事件。如果您从原始日期的副本开始,然后将月份中的某一天设置回去,您会得到正确的答案。

【讨论】:

  • 这很愚蠢,如果你问我的话。他们应该叫它setDay(),而不是setDate()
  • @RobertHarvey:他们应该使用 JavaScript Date 对象以不同方式完成的大量事情将(并且可能会)填满体积......
  • @RobertHarvey 是的,或setDayOfMonth 或其他。然而我有一个情有独钟,因为 Date 对象(虽然有各种各样的问题)真的很方便。
  • 但公平地说:正确的一件事是即使 date 是一个月的第一天,Pointy 的代码也可以工作,因此 date.getDate() - 1 是 @987654329 @。例如,如果 date 是 3 月 1 日,它将给您 2 月 28 日(或适当的 2 月 29 日)。
  • @T.J.Crowder 是的,完全正确 - 它使构建日历显示等事情变得非常容易。
【解决方案2】:

试试这个:

var date = new Date('04/28/2013 00:00:00');
var yesterday = new Date(date.getTime() - 24*60*60*1000);

【讨论】:

  • 并非所有日子都是 24 小时。我们在我的国家有夏令时,这意味着我们每年一天 23 小时一天,一年一次一天 25 小时。您的代码无法正确处理此问题。
  • @Arbiter:别忘了闰秒!
【解决方案3】:

使用这个简单的功能:

private _getYesterdayDate(): Date{
  const yesterday:Date = new Date();
  yesterday.setDate(yesterday.getDate() - 1);
  return yesterday;
}

即使日期为the first day of a month,该功能也有效,并且您使用了date.getDate() - 1,它会酌情为您提供last day in the previous month

【讨论】:

    【解决方案4】:
    var allmonths = [
        '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'
    ];
    var alldates = [
        '01', '02', '03', '04', '05', '06', '07', '08', '09', '10',
        '11', '12', '13', '14', '15', '16', '17', '18', '19', '20',
        '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31'
    ];
    
    var today = "2014-12-25";   
    var aDayBefore = new Date(today);
    aDayBefore.setDate(aDayBefore.getDate() - 1);
    
    document.write(aDayBefore.getFullYear() 
      + '-' + allmonths[aDayBefore.getMonth()] 
      + '-' + alldates[aDayBefore.getDate() - 1]);
    

    【讨论】:

    • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation would greatly improve its long-term value 通过展示为什么这是一个很好的解决问题的方法,并将使其对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。
    猜你喜欢
    • 2020-04-12
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 2017-10-23
    • 2010-12-14
    • 1970-01-01
    • 2011-01-30
    相关资源
    最近更新 更多