比较 Mongoose Doc 中的日期并表达当前日期

2023-12-27

我正在查找正在提交 POST 请求的用户,然后查明他们是否拥有与他们尝试提交的同一架构中的文档。如果有多个,我会排序并返回最新的一个。我想将当前日期与 mongoose 文档中找到的日期进行比较,看看他们在过去 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可以从项目的免费下载homepage https://momentjs.com/。 Moment.js 可以从浏览器运行,也可以从内部运行Node.js应用。为了将其与 Node 一起使用,请使用以下命令安装该模块。

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

const moment = require('moment');

moment().format();

为了从浏览器运行 Moment,请下载脚本并使用脚本标记将其包含在内,如以下示例所示。 Moment.js 创建一个全局 moment 对象,可用于访问所有日期和时间解析和操作功能。

***日期格式****


过去,我记得将日期字符串转换为 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() and subtract()方法。以下示例显示如何将 7 天、7 月或 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();

此代码示例显示“几秒钟前”。如果我们向 moment 对象提供日期,它将根据差异显示从现在开始的时间范围。例如,以下代码显示“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('差异为 ', dateB.diff(dateC), '毫秒'); console.log('差异为', dateB.diff(dateC, '天'), '天'); console.log('差异为 ', dateB.diff(dateC, '月份'), '月份');

日期查询

Moment.js还提供了日期比较方法。这些方法是isBefore(), isAfter(), and 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()方法,特别适合您的情况;)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比较 Mongoose Doc 中的日期并表达当前日期 的相关文章

  • 检测单选按钮/复选框状态的变化

    我需要可靠地检测页面上单选按钮 复选框的状态变化 以便查看表单是否被修改 现在 这是一个完全独立的脚本 我无法修改任何控制表单的内容 目前 我只能看到两种方法 onchange事件处理程序 有助于处理文本框 文本区域和选择 但不会针对复选框
  • 如何恢复文本框数据

    我有一个小小的要求 我们已经恢复了之前清除的文本框数据 下面是我的 HTML 代码 table tr td td tr table
  • 我可以通过什么方式混合 jQuery 和 vanilla JavaScript

    我有一个用普通 JavaScript 编写的 Web 应用程序 我想用 jQuery 动画来增强它 并使用我在各种 jQuery 插件中找到的一些功能 例如上传 http www uploadify com 可以通过什么方式将 jQuery
  • 在节点环境中存根 jQuery.ajax (jQuery 2.x)

    我正在尝试运行一些需要存根的测试jQuery ajax 我正在使用 SinonJS 来做到这一点 它曾经与旧版本的 jQuery 1 x 一起工作得很好 var require jquery var sinon require sinon
  • 有没有办法动态更改 jqGrid 的单元格值?

    这个问题可能已经被问过很多次了 但我想知道是否可以动态更改 jqgrid 的单元格值 我基本上有一个网格 它通过 JSON 字符串加载数据 在特定列的某些行上 该值可能为 null 因此 预先知道哪个行 ID 是一个问题 然后能够将 nul
  • Heroku、NodeJs 和 React 问题:SCRIPT5007:无法获取未定义或空引用的属性“应用”

    我猜我对 Polyfill 有一个奇怪的问题 我在我的应用程序中使用了 MERN stack 并推送到了 Heroku 由于某种原因 在我的 Chrome 计算机上我可以查看该网站 但是 在其他计算机上我收到空白页面并在控制台中出现错误 S
  • 判断字符串是否包含有效的javascript代码

    我正在寻找一个C 返回的函数true如果字符串包含有效的 JavaScript 语法 例如 IsValidJavascript alert hello 会回来true but IsValidJavascript alertXXhelloZ
  • 如何将 Ajax.BeginForm MVC 助手与 JSON 结果一起使用?

    我正在尝试使用 ASP NET MVC Ajax BeginForm 帮助程序 但不想在调用完成时使用现有的内容插入选项 相反 我想使用自定义 JavaScript 函数作为回调 这可行 但我想要的结果应该以 JSON 形式返回 不幸的是
  • 更新存储在 chrome 扩展本地存储中的对象

    我正在开发一个 chrome 扩展 我将存储服务器发送的对象 例如 我将收到 命令 id 1 类型 A 大小 B 优先级 C 如果我有一个数据库 我会将其作为表中的一行插入commands 使用 chrome storage 我将这些对象的
  • jQuery:将文本区域滚动到给定位置

    我有一个包含很多文本的文本区域
  • Firefox Addon 中的 JQuery 导致多个警告

    我在 Firefox 插件中使用 jquery 但我不断收到大量警告消息 如下所示 anonymous function does not always return a value System JS WARNING resource g
  • Angular2:动态同步http请求

    Goal 发出一系列同步 http 请求并能够将它们作为一个可观察流进行订阅 示例 不工作 let query arr test1 test2 test3 function make request query arr if query a
  • 播放没有音频标签的音频

    是否可以在没有音频标签的情况下仅使用 javascript 播放音频 我通过 tinyMce 编辑器注入脚本 因为我无权访问网站的后端 并且它不支持客户端的音频标签 她只想要当您将鼠标悬停在图像上时发出简单的声音 我已经完成了所有设置 但是
  • ES6 模块范围

    我有代码 lib js var a a export var b b main js console log a a variable is not available in a global scope import b from lib
  • 在反应中访问回调内的 event.target

    我有以下课程片段 constructor props super props this timeout null search e gt clearTimeout this timeout this timeout setTimeout f
  • 如何将MathJax公式转换为img

    Mathjax 现在在我的项目中运行良好 但有一个问题 有没有办法将MathJax的公式 纯html和css 转换成img文件 我可以保存 MathJax 可以配置为生成 SVG 看http docs mathjax org en late
  • 如何跨多个文件跨越 javascript 命名空间?

    我永远忽略了javascript 几年前我开始使用 jQuery 这样我就可以过得去 但随着我开始更多地进行 TDD 我昨天决定真正深入研究 javascript 之后可能还有咖啡脚本 在我的 ASP NET Web 窗体应用程序中 我有很
  • Graphql 将多个查询合并(组合)为一个?

    我正在尝试使用 JavaScript 将多个 GraphQL 查询合并为一个查询 我正在寻找这样的东西 let query3 mergeQueries query1 query2 我们事先不知道哪些查询将被组合 假设我有这样的查询 输入查询
  • 为什么 JavaScript 中是 [1,2] + [3,4] = "1,23,4" ?

    我想将一个数组的元素添加到另一个数组中 所以我尝试了以下方法 1 2 3 4 它的回应是 1 23 4 到底是怎么回事 The 操作员没有为数组定义 发生的事情是 JavaScript将数组转换为字符串并将它们连接起来 Update 由于这
  • 如果 POST 响应仅包含 ID,如何将数据保存到我的 Ember 存储?

    Ember 数据期望我的服务器在每次成功后返回完整的对象POST 但是 我的 API 只返回一种元对象 其中包含id 当 Ember 收到此对象时 记录中的现有数据将被删除 除了id 例如 当我这样做时 var asset App Asse

随机推荐

  • 如何使用 winmm.dll 确定歌曲的长度?

    I ve P 从 WinMM dll 调用 mciSendString 方法 http www pinvoke net default aspx winmm mciSendString DllImport winmm dll private
  • 格式化文件路径

    我是 Python 新手 所以我的做法可能完全错误 但我在获取和更改文件目录时遇到问题 我的脚本接受可以位于任何目录中的多个文件名 在我的脚本中 我需要 python 更改到文件的目录 然后执行一些操作 但是 我在更改目录时遇到问题 这是我
  • 使用 Rstudio 实时预览 Rmarkdown 文档

    我一直使用 VScode 作为主要的记笔记平台 并且我已经非常习惯实时预览功能 现在我必须使用 Rmarkdown 生成可更新的报告 我想知道是否有人知道如何使用 Rstudio 生成实时预览 我对有关 R 和 Rmarkdown 的 Vs
  • 如何使用AWS Cognito作为单点登录?

    我有 2 个网站 用户注册 登录和其他内容 将在 认知用户池 用户个人资料 自我保健 两个站点位于不同的域中 如何在两个站点之间实施 SSO 是的 您可以通过以下方式进行操作 登录在第一个站点上完成 您将获得一个令牌 在第二个站点上使用此令
  • OAuth2FeignRequestInterceptor 的替代方案,因为它现已弃用

    在我之前的实现中 我使用的是 OAuth2FeignRequestInterceptor 但从 Spring security 5 开始 OAuth2FeignRequestInterceptor 似乎已被弃用 有什么替代方法可以达到同样的
  • 尝试在 Eclipse 中创建新项目时出现“构建路径条目丢失”错误

    缺少构建路径条目 org eclipse jdt launching JRE CONTAINER org eclipse jdt internal debug ui launcher StandardVMType JavaSE 1 7 当我
  • 如何使用 SwiftUI DocumentGroup 读取大文件而不制作临时副本?

    我制作了一个 SwiftUI DocumentApp 它可以读取大型媒体文件 但不需要写入它们 在我的文档中 我只想存储文件的 URL 以便我可以使用例如加载它 AVAudioFile 如果不像作者那样创建文件的临时副本 我无法弄清楚如何执
  • 确定mysql中列允许的最大长度

    表的结构如下 registrant id varchar 16 registrant name varchar 128 我想运行一个查询来显示与最大允许长度匹配的所有条目 即我当前对上述内容所做的操作 SELECT FROM tm regi
  • localeCompare 进行自然排序?

    我正在开发一个漫画书阅读器 我有一些用户上传的文件 图像 文件对象 我正在使用它们的文件名以便按正确的顺序对它们进行排序 我尝试使用localeCompare对它们进行自然排序 但没有运气 页面应按以下方式排序 page1 page2 pa
  • 水晶报表无法运行 Azure Web 应用程序

    我们在 ASP NET 应用程序中使用水晶报表 https kegxchange azurewebsites net https kegxchange azurewebsites net 然而 当我们发布应用程序时 我们收到错误 无法加载文
  • 如何回收Java线程堆栈使用的内存?

    我已经遇到这个内存泄漏问题好几天了 我想我现在有了一些线索 我的记忆java进程不断增长 但堆却没有增加 有人告诉我 如果我创建许多线程 这是可能的 因为 Java 线程使用堆之外的内存 我的java进程是一个服务器类型程序 所以有1000
  • 哪个是 Rails 应用程序的最佳数据库?

    我正在开发一个 Rails 应用程序 它将访问大量 RSS 提要或抓取数据站点 主要是新闻 它将类似于 Google 新闻 但采用不同的方法 因此我将存储大量新闻 或新闻摘要 将它们分类为不同的类别 并使用排名和推荐技术 我应该选择 MyS
  • Angular HttpClient 结合管道、点击和订阅?

    我正在尝试使用 Angular 中的 HttpClient 检索一些数据 我的代码如下所示 getData suffurl string id number Observable
  • Angular 2 RxJS检查鼠标事件在延迟后是否仍然活动

    我正在使用 Angular 2 来制定指令 我将以下事件绑定到主机组件 host mouseenter onMouseEnter event mouseleave onMouseLeave event 我还在指令上创建了两个流和侦听器来管理
  • 是否有可能破解并更新 Firebase 实时数据库数据

    最近我使用 Firebase 构建了一个应用程序 但是在我通过广告获得了一些用户后 有人刚刚入侵了 Firebase 数据库并更新了所有用户数据 例如 用户名 个人资料图片路径 他们将其设置为不好的词和不好的图片 然后我还检查了 Fireb
  • Safari 9 中后退按钮后触发 JQuery/Javascript

    当我使用 Chrome Firefox 中的浏览器后退按钮向后导航时 我的网站按预期工作 与不向后导航而加载的情况相同 在 Safari 中 导航回来后 我无法触发任何 加载 类型的事件 无论标准文档是否准备就绪 还是在 StackOver
  • Android:如何将rtmp流地址发送到外部视频播放器(例如MX播放器)

    就像我的问题所述 如何将 rtmp 流地址发送到外部媒体播放器 Mx Player 能够播放我的流 但我无法将地址发送给它 我试过这个 String videoUrl rtmp mystream Intent i new Intent an
  • 如何使用 Python 从文本 (str) 中提取和增加小时

    例如我有这个文本 输入 Event Time Monday 10 01 02 269 to 10 01 08 702 Reported by John Event Time Sunday 20 01 08 931 to 20 01 15 2
  • 在SqlPackage.exe部署的dacpac中创建用户导致登录失败SqlException

    Problem 我正在尝试自动化 SQL 部署 包括用户和角色 当我在 Sql Management Studio 中创建用户时它可以工作 但是当我部署 dacpack 时 我得到 SqlException Login Failed for
  • 比较 Mongoose Doc 中的日期并表达当前日期

    我正在查找正在提交 POST 请求的用户 然后查明他们是否拥有与他们尝试提交的同一架构中的文档 如果有多个 我会排序并返回最新的一个 我想将当前日期与 mongoose 文档中找到的日期进行比较 看看他们在过去 30 天内是否执行了相同的操