如何使用mongoose正确地确定发送到NodeJS服务器的搜索日期



在应用程序中,我正在开发一个日期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点时,问题就会出现

这种情况下我该怎么办?

看起来这是因为时间偏移。您可以尝试将时间偏移差添加到UTC时间中。这可能会给你带来想要的结果。

一旦你收到ISO格式的日期,你可以试试这样的方法。

19800是以秒为单位的时区偏移的默认值;亚洲/加尔各答";

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

您可以使用此UTC差异来获取您的本地时间。

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

问题是,我从收到的原始日期更改了UTC小时的小时,这使得它落后于偏移量差异,所以我把搜索日期搞砸了,所以设置区域设置小时可以正确地在两个日期之间搜索,然后猫鼬已经正确地在集合中搜索所需的日期。

最新更新