MySQL& PHP - 如何在单独存储时转换日期,时间和时区

时间:2015-12-01 17:28:31

标签: php mysql datetime laravel-5.1 php-carbon

在我们的应用程序中,我们目前分别存储日期,时间和时区。日期字段是可选的,这就是我们将所有内容分开的原因。对于用户界面,他们将专门选择日期,时间和时区。所有内容当前都以UTC格式存储,时区将是一个ID,它引用另一个查找表。

我理解并看到它的方式,我们可以显示用户指定的日期和时间,只需显示所有这三个值而无需调整任何内容。如果他们在太平洋标准时间晚上11-30-15下午6点进入,这就是他们会看到的,但是我们认为合适的格式。

  • 到目前为止,有没有人能想到这样做的直接问题?
  • 我应该如何处理时间转换?在系统的某个时刻,它需要了解实际时间。系统时间是UTC,但如果需要在太平洋标准时间上午11点执行某些工作,那么它需要知道。我想知道是否存在将时间存储为UTC的问题,但让它们指定不同的时区。例如,时间应该是PST,但存储为UTC。

我正在使用Laravel with Carbon,只是为了提供更多信息。任何反馈都会很棒!

1 个答案:

答案 0 :(得分:0)

将整个日期,时间和时区存储为单个列。将用户输入的时间转换为GMT并存储在db中。当您需要向用户显示将GMT转换为USERTIMEZONE时的时间。

function convertDateTimeToGMT($dtime) { date_default_timezone_set('GMT'); $dtzone = new DateTimeZone(getTimeZoneDateTime($_SESSION['USER_TIMEZONE'])); $dtime->setTimeZone($dtzone); return $dtime->format(getGeneralTimeFormat()); } function convertGMTToLocalTime($timestamp) { date_default_timezone_set('GMT'); $dtime = new DateTime($timestamp); $dtzone = new DateTimeZone(getTimeZoneDateTime($_SESSION['USER_TIMEZONE'])); $dtime->setTimeZone($dtzone); return $dtime->format(getGeneralTimeFormat()); }

set @xml.modify
(
'
    replace value of (/Content/ContentItems/ContentItem/Body/text())[1]  
    with    (
            if (/Content/ContentItems/ContentItem/ContentKey/text() = "abc") then "Success"
            else ""
            )
')

select @xml

`