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


MySQL & PHP - How to convert date, time, and timezone when stored separately

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

按照我的理解和查看方式,我们可以显示用户指定的日期和时间,只需显示所有三个值,而无需调整任何内容。如果他们进入太平洋标准时间下午11:30-15:00,他们会看到,按照我们认为合适的格式。

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

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

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

function getGeneralTimeFormat()
{
    return 'Y-m-d H:i:s';
}
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());
}