The issue at a high level:

wine 店所有者设置关于何时可以在餐厅(5pm - 10pm)预订预订的时间范围.在此记录中,还将有一个时区,因此当数据显示给用户时,我可以将日期转换为编码时所在的原始时区.这是为了让处于另一个时区的用户可以看到预期的日期,而不是编码到其本地时区.

The issue:

如果用户在另一个时区进行预订,他们的数据将被存储为:

date: DateObj

timezone: zyx

如果我现在试图检索当天的所有预订,我就是在为一个问题埋下伏笔:

  1. 如果UTC时间戳小于前一天/后一天,则无法找到

下面是抓取方法的一个片段

const startOfDay = new Date(dateParam);
startOfDay.setHours(0, 0, 0, 0);

const startOfNextDay = new Date(startOfDay);
startOfNextDay.setDate(startOfDay.getDate() + 1);

const reservations = await this.reservationModel
  .find({
    reservationDate: {
      $gte: startOfDay,
      $lt: startOfNextDay,
    },
    restaurantId: restaurantId,
  })

潜在的解决方案:

我可以把日期当作一个断了的字符串来传递.

{
   day: 12,
   month:11,
   year:2024,
   time:xyz
}

并使用服务器时区构建日期,以使其始终保持一致.因此,当我得到预订时,将不会有时区问题,因为所有的日期都将在服务器时区.

我很想知道是否可以将startOfDay日期变量设置为使用UTC日期的开始.这会是同样有效的东西吗?

推荐答案

将startOfDay变量设置为UTC日的开始确实可以避免时区问题.这将确保日期处理方式的一致性,无论用户的时区如何. 您可以通过使用setUTCHours、setUTCMinutes和setUTCSeconds等方法将UTC时区中的时间组件设置为零来实现这一点.从理论上讲,这样的东西应该是可行的,

const startOfDay = new Date(dateParam)
startOfDay.setUTCHours(0, 0, 0, 0) // ...set hours, minutes, seconds, and milliseconds to zero in UTC timezone

const startOfNextDay = new Date(startOfDay)
startOfNextDay.setUTCDate(startOfDay.getUTCDate() + 1) // ...increment UTC date by 1 to get the start of the next UTC day

const reservations = await this.reservationModel
  .find({
    reservationDate: {
      $gte: startOfDay,
      $lt: startOfNextDay,
    },
    restaurantId: restaurantId,
  })

Javascript相关问答推荐

Cookie中未保存会话数据

jQuery提交按钮重新加载页面,即使在WordPress中使用preventDefault()

判断表格单元格中是否存在文本框

如何修复我的js构建表每当我添加一个额外的列作为它的第一列?

Angular 17—每当一个布尔变量变为真时触发循环轮询,只要它保持为真

在Vite React库中添加子模块路径

您能在卸载程序(QtInsteller框架)上添加WizardPage吗?

不能将空字符串传递给cy.containes()

WhatsApp Cloud API上载问题:由于MIME类型不正确而导致接收&Quot;INVALID_REQUEST";错误

如何在ASP.NET项目中使用Google Chart API JavaScript将二次轴线值格式化为百分比

更新动态数据中对象或数组中的所有值字符串

TypeError:无法读取未定义的属性(正在读取';宽度';)

Vaadin定制组件-保持对javascrip变量的访问

将对象推送到数组会导致复制

AddEventListner,按键事件不工作

在JS/TS中将复杂图形转换为数组或其他数据 struct

自动滚动功能在当前图像左侧显示上一张图像的一部分

JavaScript将字符串数字转换为整数

为什么我的Navbar.css没有显示在本地主机页面上?

KeyboardEvent:检测到键具有打印的表示形式