用JavaScript计算昨天的日期

Ome*_*ega 244 javascript date

如何将昨天计算为JavaScript中的日期?

Jam*_*urz 398

var date = new Date();

date ; //# => Fri Apr 01 2011 11:14:50 GMT+0200 (CEST)

date.setDate(date.getDate() - 1);

date ; //# => Thu Mar 31 2011 11:14:50 GMT+0200 (CEST)
Run Code Online (Sandbox Code Playgroud)

  • 尼斯.乍一看,似乎这会失败,因为`getDate`返回月份的日期(例如:1 - 31),但实际上`setDate(0)`将日期设置为上个月的最后一天.这是否适用于所有浏览器? (7认同)
  • 无法验证“所有”浏览器,但在我测试的所有浏览器中都有效 https://camo.githubusercontent.com/d9443979594114be925dc586285797773c60adbc/68747470733a2f2f63692e746573746c696e672e636f6d2f6a616d65736b 796275727a2f7965737465726461792e706e67 (5认同)

Koo*_*Inc 82

不是很有效,但作为oneliner:

var yesterday = new Date(new Date().setDate(new Date().getDate()-1));
Run Code Online (Sandbox Code Playgroud)

上面创造了三个Date不必要浪费的物体.这可以简化为单个实例化:

var yesterday = (function(){this.setDate(this.getDate()-1); return this})
                  .call(new Date)
Run Code Online (Sandbox Code Playgroud)

或者,如果您愿意:

var yesterday = (function(d){ d.setDate(d.getDate()-1); return d})(new Date)
Run Code Online (Sandbox Code Playgroud)

或者,如果您更喜欢带箭头功能的ES6:

let yesterday = ( d => new Date(d.setDate(d.getDate()-1)) )(new Date);
Run Code Online (Sandbox Code Playgroud)

  • 我宁愿避免弄乱范围:`var yesterday =(function(d){d.setDate(d.getDate() - 1); return d})(new Date)` (5认同)
  • 如果您需要单行,请使用类似新日期(Date.now() - 24*60*60*1000); 这样做的好处是只创建一个Date对象.但老实说,无论是谁维护这些代码,都会更加高兴看到清晰的2行版本,而不是抛出函数的东西(或毫秒,就此而言). (2认同)

ash*_*ram 63

试试这个

var d = new Date();
d.setDate(d.getDate() - 1);
Run Code Online (Sandbox Code Playgroud)

  • 下一个命令 d.setHours(19,59); 将时间设置为晚上 7:59 (2认同)

Fab*_*ani 55

令人惊讶的是,没有答案指向最简单的跨浏览器解决方案

要找到昨天完全相同的时间:

var yesterday = new Date(Date.now() - 86400000); // that is: 24 * 60 * 60 * 1000
Run Code Online (Sandbox Code Playgroud)

那就是如果你想要无依赖性,否则我建议使用http://momentjs.com

  • 为什么要评论?这更清楚:`const昨天 = new Date(Date.now() - 24 * 60 * 60 * 1000);` (5认同)
  • 当夏令时变化时,这如何工作?难道不会在一小时前后磕碰吗? (4认同)
  • 这不是正确答案,因为并非所有日子都是 24 小时。在采用夏令时的国家(例如整个欧洲和大部分北美),一天持续 23 小时,一天持续 25 小时。 (4认同)
  • 并且不要忘记闰秒。 (2认同)

小智 17

要概括问题并使用其他差异计算:

var yesterday = new Date((new Date()).valueOf() - 1000*60*60*24);
Run Code Online (Sandbox Code Playgroud)

这将基于"now"的值创建一个新的日期对象作为整数,表示以毫秒为单位减去一天的unix时期.

两天前:

var twoDaysAgo = new Date((new Date()).valueOf() - 1000*60*60*24*2);
Run Code Online (Sandbox Code Playgroud)

一小时前:

var oneHourAgo = new Date((new Date()).valueOf() - 1000*60*60);
Run Code Online (Sandbox Code Playgroud)

  • 我很惊讶没有人指出这不是正确答案,因为并非所有日子都是 24 小时。在采用夏令时的国家(例如整个欧洲和大部分北美),一天持续 23 小时,一天持续 25 小时。 (3认同)

小智 7

//Create a date object using the current time
var now = new Date();

//Subtract one day from it
now.setDate(now.getDate()-1);
Run Code Online (Sandbox Code Playgroud)


guy*_*oni 7

我使用时刻库,它非常灵活且易于使用.

在你的情况下:

let yesterday = moment().add(-1, 'day').toDate();
Run Code Online (Sandbox Code Playgroud)

======更新======

let yesterday = moment().subtract(1, 'day').toDate();
Run Code Online (Sandbox Code Playgroud)

  • 你最好用减法代替加法 (2认同)
  • 对于使用 [Dayjs](https://day.js.org/) ``dayjs().add(-1, 'day')``` 的人 (2认同)

Dee*_*ath 6

var today = new Date();
var yesterday1 = new Date(new Date().setDate(new Date().getDate() - 1));
var yesterday2 = new Date(Date.now() - 86400000);
var yesterday3 = new Date(Date.now() - 1000*60*60*24);
var yesterday4 = new Date((new Date()).valueOf() - 1000*60*60*24);
console.log("Today: "+today);
console.log("Yesterday: "+yesterday1);
console.log("Yesterday: "+yesterday2);
console.log("Yesterday: "+yesterday3);
console.log("Yesterday: "+yesterday4);
Run Code Online (Sandbox Code Playgroud)

  • 请记住,并非所有日子都是 24 小时。在采用夏令时的国家(例如整个欧洲和大部分北美),一天持续 23 小时,一天持续 25 小时。因此,这四个实现中只有第一个实现可以解决这个问题。 (2认同)

小智 5

这将在昨天00:00以分钟精度产生

var d = new Date();
d.setDate(d.getDate() - 1);
d.setTime(d.getTime()-d.getHours()*3600*1000-d.getMinutes()*60*1000);
Run Code Online (Sandbox Code Playgroud)


小智 5

new Date(new Date().setDate(new Date().getDate()-1))
Run Code Online (Sandbox Code Playgroud)

  • 您可以添加一些解释吗?仅普通代码块并没有帮助 (3认同)