如何使用猫鼬正确塑造发送到 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 服务器的搜索日期的主要内容,如果未能解决你的问题,请参考以下文章