如何使用猫鼬正确塑造发送到 NodeJS 服务器的搜索日期

Posted

技术标签:

【中文标题】如何使用猫鼬正确塑造发送到 NodeJS 服务器的搜索日期【英文标题】:How to properly shape a search date sent to a NodeJS server with mongoose 【发布时间】:2021-12-25 21:48:04 【问题描述】:

在应用程序中,我正在开发我有一个日期input 字段。

我想用它来搜索特定日期的appointments集合。

在服务器上,我正在处理UTC 中的所有日期,这就是搜索的方式

  const date = // date in iso sent from client
  const startDate = new Date(date);
  const endDate = new Date(date);
  startDate.setUTCHours(0);
  endDate.setUTCHours(24);
  query.date = 
    $gte: startDate,
    $lt: endDate,
  ;

问题是每当我从 input 字段中搜索日期时,都会发生一些怪癖

当我发送到ISO 中的日期时,会根据约会的时间显示前一天的一些搜索。

我尝试像这样date.setHours(0) 更改日期,然后发送ISO 字符串,同样的事情发生的唯一区别是当UTC 中的约会时间超过凌晨5 点时问题出现了

在这种情况下我该怎么办?

【问题讨论】:

【参考方案1】:

由于时间偏移,它看起来正在发生。 您可以尝试将时间偏移差添加到 UTC 时间。这可能会给你想要的结果。

收到 ISO 格式的日期后,您可以尝试类似的操作。

19800 是“亚洲/加尔各答”的时区偏移的默认值(以秒为单位)

const newDate = new Date()
const serverOffset = newDate.getTimezoneOffset() * 60
const utcDifference = 19800 + serverOffset
console.log(utcDifference);

您可以使用此 UTCDifference 来获取您的当地时间。

【讨论】:

【参考方案2】:

我能够通过在服务器上将setUTCHours 切换为setHours 来解决此问题

问题是我从收到的原始日期更改了UTC 小时的小时数,这使得它落后于偏移差异,所以我弄乱了搜索日期,所以设置语言环境小时给出了在两个日期之间搜索的正确效果,然后 mongoose 已经正确地在集合中搜索所需的日期。

【讨论】:

以上是关于如何使用猫鼬正确塑造发送到 NodeJS 服务器的搜索日期的主要内容,如果未能解决你的问题,请参考以下文章

如何在 NodeJS 的任何猫鼬模型中使用数组?

如何使用猫鼬删除nodejs中的多条记录

猫鼬使用方法将模式添加到模式中

如何将 MongooseMap 转换为 JSON 对象以将其从 Node js 发送到 React?

如何在nodejs中将猫鼬模型数据作为数组返回[重复]

nodejs问题将graphql上传文件发送到服务