我正在查找正在提交POST请求的用户,然后找出他们是否在试图提交的同一Schema中有文档。如果它们有多个,我将排序并返回最新的一个。我想将当前日期与猫鼬文档中找到的日期进行比较,以查看他们在过去30天内是否执行了相同的操作,如果是,则阻止他们执行上述操作。
尝试了多种Google搜索解决方案/ stackoverflow / reddit想法,但没有得到我想要的。
在Express中我的POST请求中
let currentDate = new Date();
console.log(currentDate);
User.findOne({
user: req.user.id
})
.then(user => {
Scores.find().sort({date: -1}).limit(1)
.select('date')
.then(date => {
if (currentDate - date <= 30) {
res.json({toosoon: 'You are attempting to do this action too many times in one month'})
})
})
})
如果用户在我的收藏夹中拥有的文档的日期小于或等于上次提交的30天,则阻止用户提交提交请求。
答案 0 :(得分:0)
这是您可以在代码中使用的简单JS日期操作。
let date = new Date();
console.log('Today is: ' + date.toLocaleString());
date.setDate(date.getDate() - 30);
console.log('30 days ago was: ' + date.toLocaleString());
但是,我强烈建议您使用moment.js library
此处包含有关如何使用它的完整说明,包括。例子:
Moment.js入门:
Moment.js
可从项目的homepage免费下载。 Moment.js可以从浏览器以及Node.js
应用程序中运行。为了与Node一起使用,请使用以下命令安装模块。
npm install moment
然后,只需require()并将其在您的应用程序中使用,如下所示。
const moment = require('moment');
moment().format();
为了从浏览器中运行Moment,请下载脚本并使用script标签将其包括在内,如以下示例所示。 Moment.js创建一个全局矩对象,该对象可用于访问所有日期和时间解析和操纵功能。
***日期格式****
过去,我记得将日期字符串转换为Date对象,获取单个数据,然后执行字符串连接。 Moment.js
简化了将日期转换为任何特定格式的过程。使用Moment进行日期格式转换很简单,如以下示例所示。
moment().format('YYYY MM DD');
moment()
给出当前日期和时间,而format()
将当前日期和时间转换为指定的格式。本示例将日期格式设置为四位数的年份,后跟一个空格,然后是两位数的月份,另一个空格和两位数的日期。您可以通过查看此演示来查看此代码。
日期验证
Moment.js简化的另一个烦人的任务是日期验证。为了执行验证,只需将日期字符串和日期格式一起传递给moment对象,然后调用isValid()方法。如果日期有效,则此方法返回true,否则返回false。下面显示了一个示例以及随附的演示。
let dateEntered = $('#txtEnteredDate').val();
if (!moment(dateEntered,'MM-DD-YYYY').isValid()) {
console.log('Invalid Date');
} else {
console.log('Valid Date');
}
moment()
返回的对象中还有许多其他有用的标志:
overflow –发生溢出时设置。例如第13个月或第32天。
*invalidMonth* – Set when the month is invalid, like Jannnuaarry.
*empty* – Set when the entered date contains nothing parsable.
*nullInput* – Set when the entered date is null.
操作日期
有许多用于操纵矩对象的选项。例如,您可以添加或减去天,月,年等。这可以通过add()
和subtract()
方法来实现。以下示例显示了如何将7天,几个月或几周添加到当前日期。
moment().add('days', 7); // adds 7 days to current date
moment().add('months', 7); // adds 7 months to current date
moment().add('years', 7); // adds 7 years to current date
同样,subtract()
方法如下所示。
moment().subtract('days', 7); // subtracts 7 days to current date
moment().subtract('months', 7); // subtracts 7 months to current date
moment().subtract('years', 7); // subtracts 7 years to current date
从现在开始的时间
另一个常见任务是确定两个日期之间存在多少时间。为了从当前日期开始计算时间,Moment.js
使用名为fromNow()
的方法。这是一个检查当前时间有多少时间的示例:
moment().fromNow();
此代码示例显示“几秒钟前”。如果我们向矩对象提供日期,它将根据差值显示从现在开始的时间范围。例如,以下代码显示“ 7天前”。
const dateA = moment().subtract('days', 7);
dateA.fromNow();
另一个日期的时间
fromNow()用于将时间与当前日期进行比较。这只是from()
的特例,它比较两个任意日期。下面显示了一个使用from()的示例。该代码“一天内显示”。您可以通过查看此演示来查看此代码的运行情况。
const dateB = moment('2019-12-12');
const dateC = moment('2019-12-11');
console.log(dateB.from(dateC));
计算日期之间的差异
Moment.js提供了一种计算两个日期之间差异的方法。默认情况下,差异以毫秒为单位,但也可以以天,月,年等形式返回。要计算差异,请调用diff()方法。此方法将日期作为第一个参数。可以使用可选的第二个参数指定时间单位。如果不包括在内,则使用毫秒。以下示例和演示说明了如何使用diff()
。
const dateB = moment('2019-11-11');
const dateC = moment('2019-10-11');
console.log('Difference是',dateB.diff(dateC),'毫秒'); console.log('Difference是',dateB.diff(dateC,'days'),'days'); console.log('Difference is',dateB.diff(dateC,'months'),'months');
日期查询
Moment.js
还提供了日期比较方法。这些方法是isBefore()
,isAfter()
和isSame()
。顾名思义,这些方法返回一个布尔值,指示一个日期是在另一个日期之前,之后还是等于另一个日期。下面显示了一个使用isAfter()的示例。
console.log(moment('2010-09-20').isAfter('2010-10-19')); // returns false
console.log(moment('2010-11-20').isAfter('2010-10-19')); // returns true
还有一种isLeapYear()
方法可检查leap年。
我还建议您看看calendar()
方法,尤其是针对您的情况;)