Datetime 将时间保存为UTC而不使用DST(时刻)

Datetime 将时间保存为UTC而不使用DST(时刻),datetime,momentjs,dst,Datetime,Momentjs,Dst,我在试图找出将时间存储在UTC数据库中并处理DST更改的逻辑时遇到了一个问题 我在数据库中有TimeStart和TimeEnd,它们表示工作时间。如果我在DST和非DST时节省时间,就会出现问题。如果我在10月15日保存09:00-17:00,结果将是07:00-15:00(UTC),但如果我现在在非DST时添加营业时间,结果将是08:00-16:00(UTC)。我认为,在考虑DST的情况下,将力矩转换为UTC会得到一致的结果,但我错了 在前端/后端处理该问题的最佳解决方案是什么。我应该减去增加

我在试图找出将时间存储在UTC数据库中并处理DST更改的逻辑时遇到了一个问题

我在数据库中有TimeStart和TimeEnd,它们表示工作时间。如果我在DST和非DST时节省时间,就会出现问题。如果我在10月15日保存09:00-17:00,结果将是07:00-15:00(UTC),但如果我现在在非DST时添加营业时间,结果将是08:00-16:00(UTC)。我认为,在考虑DST的情况下,将力矩转换为UTC会得到一致的结果,但我错了

在前端/后端处理该问题的最佳解决方案是什么。我应该减去增加的DST时间吗?因为使用“时刻”来处理转换为UTC的过程并没有帮助,因为它会产生1小时的差异(现在我对我迄今为止使用UTC时间所做的一切表示怀疑,因为这个问题可能会出现问题)


谢谢

因为我没有必要的声誉来简单地留下评论,我想我会写一个真实的答案。(免责声明:我实际上没有使用过矩.js)

我建议您在数据库中始终将时间存储为UTC。在前端显示/存储时应进行转换

关于如何处理DST的更多信息,我发现了这个有很多答案的好问题。您应该能够将其中提到的许多内容应用于任何堆栈:


考虑到问题中的细节,很难告诉您错误在哪里,您仍然得到错误的值。

由于我没有必要的声誉只留下评论,我想我会写一个实际的答案。(免责声明:我实际上没有使用过矩.js)

我建议您在数据库中始终将时间存储为UTC。在前端显示/存储时应进行转换

关于如何处理DST的更多信息,我发现了这个有很多答案的好问题。您应该能够将其中提到的许多内容应用于任何堆栈:

考虑到问题中的细节,很难告诉您错误在哪里,您仍然得到错误的值。

建议“始终使用UTC”是短视的。有许多情况下不使用UTC,您描述的情况肯定就是其中之一。事实上,UTC不适合未来的日程安排——特别是对于重复模式

只需存储本地工作时间的开始和结束时间,不带日期。您可能还希望存储该企业所在地的时区标识符(例如
“America/Los_Angeles”

确定特定日期的营业时间时,请将数据库中的时间应用于业务时区中的日期。要知道业务是否开放,请将结果转换为UTC,以根据当前UTC时间进行测试。

建议“始终使用UTC”是短视的。有许多情况下不使用UTC,您描述的情况肯定就是其中之一。事实上,UTC不适合未来的日程安排——特别是对于重复模式

只需存储本地工作时间的开始和结束时间,不带日期。您可能还希望存储该企业所在地的时区标识符(例如
“America/Los_Angeles”


确定特定日期的营业时间时,请将数据库中的时间应用于业务时区中的日期。要知道业务是否开放,请将结果转换为UTC,以根据当前UTC时间进行测试。

谢谢,我在数据库中总是将时间存储为UTC,但我觉得DST总是存在此问题。我的确切问题是,如果用户在有DST的情况下以UTC存储营业时间,则会将07:00(UTC)保存到数据库中(因为我在+2区域)。但若用户现在添加营业时间,那个么就并没有DST,它将在数据库中显示为08:00(utc)。这是不一致的。。。我正在使用矩(date).utc()从本地转换为utc.Oh。我懂了。我想存储业务位置(时区)在这里是相关的。谢谢,我一直在数据库中存储UTC时间,但我觉得DST总是存在这个问题。我的确切问题是,如果用户在有DST的情况下以UTC存储营业时间,则会将07:00(UTC)保存到数据库中(因为我在+2区域)。但若用户现在添加营业时间,那个么就并没有DST,它将在数据库中显示为08:00(utc)。这是不一致的。。。我正在使用矩(date).utc()从本地转换为utc.Oh。我懂了。我想存储业务的位置(时区)在这里是相关的。