如何获得当前日期前 30 天?

Posted

技术标签:

【中文标题】如何获得当前日期前 30 天?【英文标题】:How to get 30 days prior to current date? 【发布时间】:2012-02-09 04:39:01 【问题描述】:

我有一个开始日历输入框和一个结束日历输入框。我们希望默认开始日历输入框在当前日期前 30 天,结束日历输入框为当前日期。这是我的日期变量。

var today = new Date(),
    dd    = today.getDate(),
    mm    = today.getMonth(),
    yyyy  = today.getFullYear(),
    month = ["January", "February", "March",
        "April", "May", "June", "July", "August",
        "September", "October" "November", "December"],
    startdate = month[mm] + ", " + yyyy.toString();

结束日期类似于var enddate = startdate - 30; 显然这行不通。

因此,如果当前日期是 2011 年 12 月 30 日,我希望开始日期为 2011 年 12 月 1 日。

编辑:我的问题得到了回答……有点。 Date.today();Date.today().add(-30); 工作,但我需要January 13, 2012 格式的日期。不是Fri Jan 13 2012 10:48:56 GMT -055 (EST)。有什么帮助吗?

更多编辑:撰写本文时是 2018 年。只需使用 Moment.js。这是最好的。

【问题讨论】:

***.com/questions/563406/… 我认为这可能会有所帮助。 【参考方案1】:

要从 JS Date 对象中减去天数,您可以使用 setDate() 方法以及开始计算的日期。这将返回一个纪元时间戳作为整数,因此要将其转换为 Date 您需要再次将其提供给 Date() 对象构造函数。最后一个示例如下所示:

var today = new Date();
var priorDate = new Date(new Date().setDate(today.getDate() - 30));

console.log(today)
console.log(priorDate);

【讨论】:

不使用外部库我最喜欢这个解决方案。谢谢。 请注意,此方法以 javascript Timestamp 格式返回。要将其转换回日期对象,您需要将上述内容传递给new Date(priorDate) 有时你只想要没有库的香草js!谢谢:) 我得到 setDate() 不是函数 @chovy 我能想象你得到这个错误的唯一方法是因为你没有在Date 对象上调用setDate()。但是,如果不查看您的代码,就无法进行诊断。【参考方案2】:

尝试使用优秀的Datejs JavaScript date library(原版不再维护,因此您可能对this actively maintained fork感兴趣):

Date.today().add(-30).days(); // or...
Date.today().add(days:-30);

[编辑]

另见优秀Moment.js JavaScript date library:

moment().subtract(30, 'days'); // or...
moment().add(-30, 'days');

【讨论】:

我很难在没有时间的情况下获得今天前后 30 天的开始日期和结束日期。这有效:moment( moment().subtract(30, 'days') ).format("YYYY-MM-DD") 我使用了moment() 方法并附加了toDate() 方法来取回JavaScript 日期对象。谢谢! 为什么需要为此使用库?这似乎很疯狂。 你能推荐一个console.log的库吗? 第一个答案不起作用请检查此链接而不是***.com/questions/563406/add-days-to-javascript-date【参考方案3】:

这是一个丑陋的解决方案:

var date = new Date(new Date().setDate(new Date().getDate() - 30));

【讨论】:

搞笑的是,这是最好的解决方案。 同意 - 这是最好的解决方案。这完全是 Rory McCrossan 的答案的解决方案 - 但简洁、完整(不需要外部库)。 @MarkRogers “热闹”是正确的词。 JavaScript 日期真的很荒谬。 是的,这是一个简单且最佳的解决方案。 丑也可以优雅。这是?【参考方案4】:
startDate = new Date(today.getTime() - 30*24*60*60*1000);

.getTime() 方法返回一个标准 JS 时间戳(自 1970 年 1 月 1 日以来的毫秒数),您可以在该时间戳上使用常规数学运算,可以直接反馈给 Date 对象。

【讨论】:

【参考方案5】:

从今天开始获取下一个第 30 天

let now = new Date()
console.log('Today: ' + now.toUTCString())
let next30days = new Date(now.setDate(now.getDate() + 30))
console.log('Next 30th day: ' + next30days.toUTCString())

立即获取最近 30 天的表单

let now = new Date()
console.log('Today: ' + now.toUTCString())
let last30days = new Date(now.setDate(now.getDate() - 30))
console.log('Last 30th day: ' + last30days.toUTCString())

【讨论】:

【参考方案6】:

Javascript 可以在没有任何外部库的情况下处理它。

var today = new Date();
var dateLimit = new Date(new Date().setDate(today.getDate() - 30));

document.write(today + "<br/>" + dateLimit)

【讨论】:

【参考方案7】:

Simple 1 liner Vanilla Javascript 代码:

const priorByDays = new Date(Date.now() - days * 24 * 60 * 60 * 1000)

例如: days = 7 假设当前date = Fri Sep 18 2020 01:33:26 GMT+0530

结果将是:Fri Sep 11 2020 01:34:03 GMT+0530

这样做的美妙之处在于您可以对其进行操作以获得所需类型的结果

时间戳:Date.now() - days * 24 * 60 * 60 * 1000

ISOString:new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString()

【讨论】:

【参考方案8】:

简单。(Using Vanilla JS)

let days=30;
this.maxDateTime = new Date(Date.now() - days * 24 * 60 * 60 * 1000);

ISO 格式?

let days=30;
this.maxDateTime = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();

【讨论】:

【参考方案9】:

我会更喜欢 moment js

startDate = moment().subtract(30, 'days').format('LL')  // January 29, 2015

endDate = moment().format('LL'); // February 28, 2015

【讨论】:

【参考方案10】:

let today = new Date()

let last30Days = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 30)

last30Days 将在日期对象中

【讨论】:

【参考方案11】:

我使用date.js。它可以轻松处理这个问题,并处理所有闰年的麻烦。

【讨论】:

【参考方案12】:

这是一个 ES6 版本

let date = new Date()
let newDate = new Date(date.setDate(date.getDate()-30))
console.log(newDate.getMonth()+1 + '/' + newDate.getDate() + '/' + newDate.getFullYear() )

【讨论】:

这与其他答案有何不同,例如this one?此外,这里没有什么是 ES5 或 ES3 无法完成的。【参考方案13】:

您可以使用 Node JS 中的 moment 简单地通过 1 行代码来做到这一点。 :)

    let lastOneMonthDate = moment().subtract(30,"days").utc().toISOString()

不想要 UTC 格式,更简单:P

    let lastOneMonthDate = moment().subtract(30,"days").toISOString()

【讨论】:

【参考方案14】:

如果你不倾向于momentjs,你可以使用这个:

let x = new Date()

x.toISOString(x.setDate(x.getDate())).slice(0, 10)

基本上它获取当前日期(当前月份日期的数值),然后设置该值。然后它转换成 ISO 格式,我从中切出纯数字日期(即 2019-09-23)

希望它对某人有所帮助。

【讨论】:

【参考方案15】:

使用 moment.js

let startDate =  moment().subtract(30, "days").format('YYYY-MM-DD'); //2021-05-18
let endDate = moment().format('YYYY-MM-DD'); //2021-06-17

【讨论】:

【参考方案16】:

对于寻找“dd 月 yyyy”格式的任何人,这对我有用:

let date = new Date()

let newDate = new Date(date.setDate(date.getDate()-30))

console.log(newDate.getDate()+ ' ' +newDate.toLocaleString('default', month: 'long') + ' ' + newDate.getFullYear() )

【讨论】:

以上是关于如何获得当前日期前 30 天?的主要内容,如果未能解决你的问题,请参考以下文章

SQL数据库怎么查询,between 当前日期 and 当前日期前30天,之间的数据

如何在codeigniter的当前日期插入天间隔?

获取当前日期前多少天,或者格式化当前日期

在 where 子句中从当前日期减去 30 天

当前日期缺失时的 30 天滚动/移动总和

斯威夫特:在“特定日期”之前获得 30 天 [重复]