如何获得当前日期前 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 天?的主要内容,如果未能解决你的问题,请参考以下文章