PHP universally convert time to users preference
本问题已经有最佳答案,请猛点这里访问。
首先,我有一列,如图所示:
用户在注册时选择时区。如何根据用户解释时间?在这种情况下,我希望用户能够定义他们希望人们何时处于活动状态,即Bob希望搜索从上午9点到下午12点处于活动状态的用户。我需要在数据库中插入什么时间戳,以便用户以这种方式进行搜索?
更新
我还询问了如何准确地找出一个时间是否与另一个时间重叠,但是交叉时间格式对此至关重要。我将包含这个代码片段,说明我如何发现时间是否重叠。谢谢佩卡的正确回答。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php date_default_timezone_set('UTC'); $min = strtotime('9am'); $max = strtotime('12pm'); echo $min. ',' .$max . '<br/>'; date_default_timezone_set('America/Chicago'); $mina = strtotime('11pm'); $maxa = strtotime('5am'); echo 'User plays between' . date("g:ia", $min) . ' and ' . date("g:ia", $max) . '<br />'; echo 'You play between' . date("g:ia", $mina) . ' and ' . date("g:ia", $maxa) . '<br />'; if((($mina >= $min) And ($mina <= $max)) Or (($maxa <= $max) And ($maxa >= $min)) Or (($min >= $mina) And ($min <= $maxa)) Or (($max <= $maxa) And ($max >= $mina)) ) { $blend = 'True'; } else { $blend = 'False'; } if($maxa === $min Or $mina === $max) $blend = 'False'; echo $blend; ?> |
在此示例中,您将看到UTC上午9点到中午12点与美国/芝加哥上午11点到下午5点重叠。
参见夏令时和时区最佳实践
底线:在内部存储UTC时间戳,将所有用户输入从首选时区转换到首选时区。差不多就是这样。