如何从普通日期中减去天数?

IT技术 javascript date
2021-01-20 20:29:53

是否有一种简单的方法可以使用 olain JavaScript Date(例如今天)并返回 X 天?

因此,例如,如果我想计算今天前 5 天的日期。

6个回答

尝试这样的事情:

 var d = new Date();
 d.setDate(d.getDate()-5);

请注意,这会修改日期对象并返回更新日期的时间值。

var d = new Date();

document.write('Today is: ' + d.toLocaleString());

d.setDate(d.getDate() - 5);

document.write('<br>5 days ago was: ' + d.toLocaleString());

setDate(-1) 将日期设置为该月的最后一天
2021-03-17 20:29:53
它的输出给了我一长串整数。知道如何将其格式化为 05/14/2012 吗?
2021-03-18 20:29:53
问题在于您最终可能会得到 00,这不是有效的日期值。
2021-03-25 20:29:53
鉴于这是在谷歌的顶部,我想我会回答上面的评论:new Date(new Date().setDate(new Date().getDate()-5))- 那将是 5 天前。在答案的示例中,将其传递给新日期以获取日期对象。所以,new Date(d)是你想要的。
2021-04-05 20:29:53
@user525146 询问如何格式化数字,而不是数字是什么。不需要居高临下的回答。要格式化的日期数,使用一个toString方法,如toISOStringtoDateString等。
2021-04-07 20:29:53
var dateOffset = (24*60*60*1000) * 5; //5 days
var myDate = new Date();
myDate.setTime(myDate.getTime() - dateOffset);

如果您在整个 Web 应用程序中执行大量令人头疼的日期操作,DateJS将使您的生活更轻松:

http://simonwillison.net/2007/Dec/3/datejs/

这是一个边缘情况,但这可能会在夏令时开始/结束时失败。你不是在减去 5 天,而是 5*24 小时。夏令时的第一天只有23小时,最后一天是25小时。这通常无关紧要,但需要考虑。
2021-03-10 20:29:53
@Kip 我讨厌夏令时……和时区。我们都应该搬到格林威治标准时间。
2021-03-11 20:29:53
@cwallenpoole 不要打破你的泡沫,但他们甚至在格林威治也使用夏令时。因此,如果您真的想参加格林威治标准时间,则仅限于冰岛和一些西非国家。
2021-03-15 20:29:53
@danielWilliams 这对新的一年怎么不起作用?getTime()并且setTime()是自纪元以来的毫秒数。时间跨过一年应该没关系。
2021-03-25 20:29:53
这种方法的问题在于它不适用于新年等。
2021-03-27 20:29:53

它是这样的:

var d = new Date(); // today!
var x = 5; // go back 5 days!
d.setDate(d.getDate() - x);
@MiroKrsjak当然,如果您跨月末/月初,这会起作用。为什么它不起作用?
2021-03-13 20:29:53
它的输出给了我一长串整数。知道如何将其格式化为 05/14/2012 吗?
2021-03-19 20:29:53
作为一个简单的方法:function getDaysAgo(b){var a=new Date;a.setDate(a.getDate()-b);return a};那么就var daysAgo45 = getDaysAgo(45);
2021-03-23 20:29:53
d.setDate 的返回值确实是一个整数值。但是,此时您可能实际上对返回值并不感兴趣,因为“d”的实际值已被修改。你现在真正的问题是如何格式化你的日期,它现在在“d”中,而不是 setDate 的返回值。(好吧,它实际上是返回值,但到那时它不是日期,我不想让您感到困惑——只需使用 d,它会更快)。对于格式化日期,您需要 d.getMonth()、d.getFullYear() 和 d.getDate() 方法。您想向 d.getMonth() 添加一个,因为 Jan 是 0。
2021-03-25 20:29:53

我注意到 getDays+ X 在日/月范围内不起作用。只要您的日期不早于 1970 年,就可以使用 getTime。

var todayDate = new Date(), weekDate = new Date();
weekDate.setTime(todayDate.getTime()-(7*24*3600000));
这是不正确的, new Date().setDate(-1) 会给你上个月的最后一天。
2021-03-15 20:29:53
getTime 工作于世界时。因此将从 Date 对象中正确减去 7 天时间。当您将其转换为指定时区的字符串时,它将正确显示该时区的时间。
2021-03-25 20:29:53
时间变更当天要小心。当我们在秋天退回时,那一天有 25 小时,因此从午夜减去 24 小时将使您在同一天。但是,如果您将每次操作后的日期四舍五入到最近的午夜,这种技术(减去毫秒)将起作用。您可以先添加 12 小时,然后将小时数设置为零。
2021-04-02 20:29:53
我也注意到了。我很惊讶更多没有,还是我错过了什么?
2021-04-07 20:29:53
这在夏令时开始/结束的边缘情况下也是不正确的。您的方法是减去 7*24 小时,假设每天都有 24 小时。夏令时的第一天只有 23 小时,最后一天是 25 小时。setDate(getDate()-7) 没有这个问题。
2021-04-09 20:29:53

获取moment.js。所有酷孩子都使用它。它有更多的格式选项等。哪里

var n = 5;
var dateMnsFive = moment(<your date>).subtract(n , 'day');

选修的!转换为 JS 日期 obj 以进行 Angular 绑定。

var date = new Date(dateMnsFive.toISOString());

选修的!格式

var date = dateMnsFive.format("YYYY-MM-DD");
通过将您的日期传递给 moment,您将开始收到警告。弃用警告:提供的值不是公认的 RFC2822 或 ISO 格式。moment 构造回退到 js Date(),它在所有浏览器和版本中都不可靠。不鼓励使用非 RFC2822/ISO 日期格式,并将在即将发布的主要版本中删除。请参阅momentjs.com/guides/#/warnings/js-date了解更多信息。
2021-03-30 20:29:53