比较Mongoose Doc和Express当前日期中的日期

时间:2019-04-19 01:02:36

标签: javascript express mongoose

我正在查找正在提交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天,则阻止用户提交提交请求。

1 个答案:

答案 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()方法,尤其是针对您的情况;)