我在我的数据库中存储了UTC的日期/时间。我正在努力在用户选择时区后添加此转换,以便显示它们的本地时间。用户基本上从表单中选择:
<select name="DropDownTimezone" id="DropDownTimezone">
<option value="-12.0">(GMT -12:00) Eniwetok, Kwajalein</option>
<option value="-11.0">(GMT -11:00) Midway Island, Samoa</option>
<option value="-10.0">(GMT -10:00) Hawaii</option>
...
我可以将选项值设为我想要的但是容易记住的一个如上所述。我将使用什么数据类型的mysql?在这种情况下真的重要吗? TINYINT会吗?也许使用ENUM会是一个好主意吗?
任何建议都将不胜感激。
答案 0 :(得分:5)
您提议的方案(将时区存储为GMT的整数偏移量)可能会因以下情况而失败:
对于全时区支持,我建议使用zoneinfo
数据库并将时区存储为字符串(例如,“America / New_York”)。
答案 1 :(得分:0)
虽然这已经很老了。但对于仍在寻找解决方案的任何人。我用了 带时区的 date-fns。我正在将 reactjs 与 node.js 一起使用。只需向表中添加一列额外的列 - 并且始终仅以 UTC 格式存储时间 - 以及附加列中的相应区域。
https://date-fns.org/v2.23.0/docs/Time-Zones
import { zonedTimeToUtc } from 'date-fns-tz'
const date = getDatePickerValue() // e.g. 2014-06-25 10:00:00 (picked in any time zone)
const timeZone = getTimeZoneValue() // e.g. America/Los_Angeles
const utcDate = zonedTimeToUtc(date, timeZone) // In June 10am in Los Angeles is 5pm UTC
postToServer(utcDate.toISOString(), timeZone) // post 2014-06-25T17:00:00.000Z, America/Los_Angeles
对于时区场景 - 列表。 https://www.npmjs.com/package/countries-and-timezones