簡體   English   中英

比較 Mongoose Doc 中的日期和 Express 當前日期

[英]Compare Dates In Mongoose Doc and Express Current Date

我正在查找提交 POST 請求的用戶,然后找出他們是否在他們嘗試提交的同一架構中有文檔。 如果他們有多個,我排序並返回最近的一個。 我想將當前日期與貓鼬文檔中的日期進行比較,看看他們是否在過去 30 天內執行了相同的操作,如果是,則阻止他們執行所述操作。

嘗試了多個谷歌搜索解決方案/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 天,則阻止用戶提交發布請求。

這是您可以在代碼中使用的簡單 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可從項目主頁免費下載。 Moment.js 可以在瀏覽器中運行,也可以在Node.js應用程序中運行。 為了將它與 Node 一起使用,請使用以下命令安裝該模塊。

npm install moment然后,只需 require() 並在您的應用程序中使用它,如下所示。

const moment = require('moment');

moment().format();

要從瀏覽器運行 Moment,請下載腳本並使用腳本標記將其包含在內,如下例所示。 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()返回的對象中還有許多其他有用的標志:

溢出 - 發生溢出時設置。 例如,第 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 is ', dateB.diff(dateC), '毫秒'); console.log('Difference is ', 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()方法可以檢查閏年。 我還建議查看calendar()方法,特別是對於您的情況;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM