如何获得 PHP 格式的格林威治标准时间?

2022-08-30 11:07:19

我有一个设置为 EST 的服务器,数据库中的所有记录都设置为 EST。我想知道如何将其设置为GMT。我想为我的用户提供时区选项。


答案 1

强烈建议避免弄乱UNIX时间戳,使其看起来像一个不同的时区。这是我用艰难的方式学到的一课,太多次了。

时间戳是自 1970 年 1 月 1 日午夜(格林威治标准时间)以来的秒数。无论您身在何处,给定的时间戳都表示完全相同的时刻,而与时区无关。是的,时间戳“0”表示澳大利亚的 10am 1/1/70、伦敦的午夜 1/1/70 和洛杉矶的 5pm 31/12/69,但这并不意味着您可以简单地添加或减去值并保证准确性。

每年让我闷闷不乐太久的黄金例子是夏令时突然出现的时候。夏令时意味着世界上某些地区不存在“时钟时间”。例如,在美国大部分地区,没有 2006 年 4 月 2 日凌晨 2:01 这样的时间。

不过,足够准理解的咆哮。我的建议是将您的日期作为时间戳存储在数据库中,然后...

例如

$timestamp = time();

echo "BRISBANE: " . date('r', $timestamp) . "\n";
echo "     UTC: " . gmdate('r', $timestamp) . "\n";
date_default_timezone_set('Africa/Johannesburg');
echo "  JOBURG: " . date('r', $timestamp) . "\n";

// BRISBANE: Tue, 12 May 2009 18:28:20 +1000
//      UTC: Tue, 12 May 2009 08:28:20 +0000
//   JOBURG: Tue, 12 May 2009 10:28:20 +0200

这将使您的值保持干净(您不必担心在保存之前添加偏移量,然后减去),它将遵守所有夏令时规则,并且您甚至不必查找所需地点的时区。


答案 2

无论服务器位于哪个GMT时区,这里都是获取任何时区的时间和日期的极其简单的方法。这是通过 和 函数完成的。该函数通常给我们GMT时间,但是通过使用该函数执行一个技巧,我们可以获得GMT + N或GMT-N,这意味着我们可以获得任何GMT时区的时间。time()gmdate()gmdate()time()

例如,如果您必须获得GMT + 5的时间,则可以按如下方式进行

<?php 
  $offset=5*60*60; //converting 5 hours to seconds.
  $dateFormat="d-m-Y H:i";
  $timeNdate=gmdate($dateFormat, time()+$offset);
?>

现在,如果您必须获取 GMT-5 的时间,则只需从 中减去偏移量,而不是将其添加到偏移量中,如以下示例所示,我们获取 GMT-4 的时间time()

<?php 
  $offset=4*60*60; //converting 4 hours to seconds.
  $dateFormat="d-m-Y H:i"; //set the date format
  $timeNdate=gmdate($dateFormat, time()-$offset); //get GMT date - 4
?>

推荐