php utc时间_如何通过PHP轻松转换UTC的日期?

这篇博客讨论了如何在PHP中处理UTC日期时间,以便根据用户的时区进行显示。作者首先将日期时间存储在UTC中,然后通过PHP的date_default_timezone_set和自定义的TimeUtil类来转换时间,以适应用户所在的PDT(-7小时)或其他时区。提供的解决方案包括了在CentOS和MySQL中的时区配置,以及PHP代码示例。
摘要由CSDN通过智能技术生成

我在UTC中的日期时间字段中将日期存储在MySQL数据库中.我正在使用PHP,并且我调用了date_timezone_set(‘UTC’),以便所有对date()的调用(没有时间戳)以UTC格式返回日期.

然后,我有它,所以给定的网站可以选择其时区.现在我希望日期显示在网站的时区.因此,如果我将日期存储为“2009-04-01 15:36:13”,则应在PDT时区(-7小时)内为用户显示为“2009-04-01 08:36:13” .

通过PHP执行此操作的最简单(最少代码)方法是什么?到目前为止,我所想到的只是

date('Y-m-d H:i:s', strtotime($Site->getUTCOffset() . ' hours', strtotime(date($utcDate))));

有更短的方式吗?

解决方法:

这是我们对服务器所做的.我们将所有内容设置为使用UTC,并通过动态转换显示在用户的时区中.这篇文章底部的代码是如何使其工作的一个例子;你应该确认它适用于所有情况下你的设置(即夏令时等).

配置CentOS

>编辑/ etc / sysconfig / clock并将ZONE设置为UTC

> ln -sf /usr/share / zoneinfo / UTC / etc / localtime

配置MySQL

>如有必要,将时区导入MySQL:

mysql_tzinfo_to_sql /usr/share / zoneinfo | mysql -u root -p mysql

>编辑my.cnf并在[mysqld]部分中添加以下内容:

default-time-zone =’UTC’

PHP代码

/*

Example usage:

$unixtime = TimeUtil::dateTimeToTimestamp('2009-04-01 15:36:13');

echo TimeUtil::UTCToPST("M d, Y - H:i:s", $unixtime);

*/

// You should move this to your regular init method

date_default_timezone_set('UTC'); // make this match the server timezone

class TimeUtil {

public static function timestampToDateTime($timestamp) {

return gmdate('Y-m-d H:i:s', $timestamp);

}

public static function dateTimeToTimestamp($dateTime) {

// dateTimeToTimestamp expects MySQL format

// If it gets a fully numeric value, we'll assume it's a timestamp

// You can comment out this if block if you don't want this behavior

if(is_numeric($dateTime)) {

// You should probably log an error here

return $dateTime;

}

$date = new DateTime($dateTime);

$ret = $date->format('U');

return ($ret < 0 ? 0 : $ret);

}

public static function UTCToPST($format, $time) {

$dst = intval(date("I", $time));

$tzOffset = intval(date('Z', time()));

return date($format, $time + $tzOffset - 28800 + $dst * 3600);

}

}

标签:php,timezone

来源: https://codeday.me/bug/20190926/1818712.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值