PHP date();有时区吗?

时间:2013-11-29 15:15:34

标签: php date timezone

所以我查看了supported time zones in PHP的列表,我想知道如何将它们包含在date()中;功能? 谢谢!

我不想要一个默认时区,每个用户都有他们的时区存储在数据库中,我拿用户的时区并使用它。怎么样?我知道如何从数据库中获取它,而不是如何使用它。

11 个答案:

答案 0 :(得分:104)

对于这样的任务,你应该真正使用PHP的DateTime类。请忽略所有建议您使用date()或date_set_time_zone的答案,它只是糟糕且过时。

我将使用伪代码进行演示,因此请尝试调整代码以满足您的需求。

假设变量$ tz包含有效时区的字符串名称,变量$ timestamp包含您希望根据时区格式化的时间戳,代码将如下所示:

$tz = 'Europe/London';
$timestamp = time();
$dt = new DateTime("now", new DateTimeZone($tz)); //first argument "must" be a string
$dt->setTimestamp($timestamp); //adjust the object to correct timestamp
echo $dt->format('d.m.Y, H:i:s');

DateTime类非常强大,并且要掌握它的所有功能 - 你应该花一些时间在php.net上阅读它。要完全回答你的问题 - 是的,你可以动态调整时区参数(在从db读取的每次迭代中,你可以创建一个新的DateTimeZone()对象。)

答案 1 :(得分:26)

如果我理解正确,您需要先设置时区,如:

date_default_timezone_set('UTC');

而且你可以使用日期功能:

// Prints something like: Monday 8th of August 2005 03:12:46 PM
echo date('l jS \of F Y h:i:s A');

答案 2 :(得分:15)

使用DateTime class代替,因为它支持时区。与date()等效的DateTime为DateTime::format

DateTime的一个非常有用的包装器是Carbon - 绝对可以看看。

您希望以UTC格式存储在数据库中并在应用程序级别进行转换。

答案 3 :(得分:8)

它应该是这样的:

date_default_timezone_set('America/New_York');

答案 4 :(得分:7)

answer above让我跳过了一些箍/陷阱,所以只需发布适合我的清洁代码:

$dt = new DateTime();
$dt->setTimezone(new DateTimeZone('America/New_York'));
$dt->setTimestamp(123456789);

echo $dt->format('F j, Y @ G:i');

答案 5 :(得分:2)

试试这个。您可以传递unix时间戳或日期时间字符串

public static function convertToTimezone($timestamp, $fromTimezone, $toTimezone, $format='Y-m-d H:i:s') 
    {
        $datetime = is_numeric($timestamp) ?
                    DateTime::createFromFormat ('U' , $timestamp, new DateTimeZone($fromTimezone)) :
                    new DateTime($timestamp, new DateTimeZone($fromTimezone));

        $datetime->setTimezone(new DateTimeZone($toTimezone));

        return $datetime->format($format);
    }

答案 6 :(得分:2)

U可以将时区差添加到unix时间戳。 莫斯科(UTC + 3)示例

echo date('d.m.Y H:i:s', time() + 3 * 60 * 60);

答案 7 :(得分:0)

我创造了这个非常简单的功能,它就像一个魅力:

function ts2time($timestamp,$timezone){ /* input: 1518404518,America/Los_Angeles */            
        $date = new DateTime(date("d F Y H:i:s",$timestamp));
        $date->setTimezone(new DateTimeZone($timezone));
        $rt=$date->format('M d, Y h:i:s a'); /* output: Feb 11, 2018 7:01:58 pm */
        return $rt;
    }

答案 8 :(得分:0)

这在2019年非常有效:

this.props.nameOfActionCreator()

答案 9 :(得分:0)

上面没有提到。您还可以通过在构造函数中将时间戳记作为字符串提供@开头来创建DateTime对象。

POOL                    ID  STORED   OBJECTS  USED     %USED  MAX AVAIL
cephfs_data              1  350 TiB  179.53M  350 TiB  66.93     87 TiB
cephfs_metadata          3  3.1 TiB   17.69M  3.1 TiB   1.77     87 TiB

请参阅有关复合格式的文档: https://www.php.net/manual/en/datetime.formats.compound.php

答案 10 :(得分:-1)

您可以在date_default_timezone_set函数中替换数据库值,     date_default_timezone_set(SOME_PHP_VARIABLE); 但只需要处理与时区相关的确切值。