当我们说存储时间为UTC时是什么意思?

问题描述 投票:0回答:1

我有一个计划应用程序,其中包含我从头开始构建的日历。作为律师,您应该可以配置您的预订时间,如下所示:

澳大利亚有律师的人:

1- 10/01/2020,从07:00 am到08:am...

这是我的工作:

1-用Javascript获取输入日期的epoch号:

  const dateFrom = new Date(firstOfJanSevenAm).getTime() // 1578600000000
// Fri Jan 10 2020 07:00:00 GMT+1100 (Australian Eastern Daylight Time)

  const dateTo = new Date(firstOfJanEightAm).getTime() // 1578603600000 
// Fri Jan 10 2020 08:00:00 GMT+1100 (Australian Eastern Daylight Time)

2-将其发送到NodeJS服务器并保存为MongoDB

     Mongoose.save({
      from:dateFrom, //1578600000000
      from:dateTo    //1578603600000
     })

3-在日历中表示它:

    <div>{format(from, 'HH:mm')}</div>

一切正常。

[现在,这名律师前往美国,并且正在使用美国当地时间(在任何城市)在咖啡店里,他打开日历,他想添加一些空缺时间,但在悉尼时间。我需要为他提供timezone dropdown,这样他可以告诉我他希望新日期基于他的家Syndey

问题:

1-我是否正在保存日期,并在旁边单独保存timeZone,并且在表示日期时,仅应用timeZone?

     Mongoose.save({
      from:dateFrom, //1578600000000
      from:dateFrom //1578603600000
      currentTimeZone : 'America/Costa_Rica',
      desiredTimeZone: 'Australia/Sydney'
     })

 <div>{formatWithTimeZone(from, 'HH:mm',desiredTimeZone)}</div>

这就是我所要做的吗?还是我天真地错过了会让我绊倒的东西?

回到我最初的问题,整个“总是将时间存储为UTC”的地方在哪里?

我所意识到的是,当我使用我正在使用的库date-fns-tz并尝试将用户输入的日期转换为UTC时,我得到的输出完全相同:

      const dateFrom = new Date(firstOfJanSevenAm).getTime() // 1578600000000
      const dateFromUTC = zonedTimeToUtc(dateFrom,currentTimeZone) // 1578600000000
      // currentTimeZone is America/Costa_Rica, when he is in Costa Rica's caffee shop.
    enter code here

      1578600000000 === 1578600000000 = true 

所以将输入日期转换为utc日期时为什么会得到相同的输出?

javascript datetime timezone utc date-fns
1个回答
0
投票

我将给您一个与技术实施脱节的答案。让我们考虑矛盾的是,您有一名律师居住在澳大利亚,另一名居住在瑞士,如果您决定将时间存放在他们首选的位置会怎样?

然后您需要保存两个信息:当然是时间(上午11点),但是它是相对的,因此您还需要存储时区(澳大利亚的上午11点或瑞士的下午1点)

现在,如果您的律师前往法国会怎样?您是否要更新他的所有日历信息?上午11点不再是11点了。

UTC解决了这个问题,您只需要存储上午11点或下午1点。 UTC是任意的绝对值,按照惯例是通用的。

因此,您的后端/数据库应始终将此类信息存储在UTC中。您需要一种了解用户时区的方法,也许可以使用Web界面进行更新,并且可以将其存储在用户数据库中或仅存储在cookie中。也许您想通过使用用户的位置,IP,浏览器的语言等来自己获取它。

现在您知道他的时区,您的服务器可以将UTC(绝对)时间发送给客户端,并且客户端可以无缝显示正确的(相对)时间。

客户端处理相对时间,服务器始终将其设为绝对时间。

© www.soinside.com 2019 - 2024. All rights reserved.