PHP格式化日期时间不关心时区

问题描述:

我有不同时区的客户,我需要分析他们的系统日志,这些日志打印在他们的本地机器时区。PHP格式化日期时间不关心时区

例如:周一4月3日0点五十分15秒CST 2017年

其实我并不关心自己的时区,我需要在我的应用只是他们的本地时间打印,所以在我的打印输出应用程序端必须是:2017-04-03 00:50:15

如何转换给定的日期而不关心他们的时区或我的本地服务器时区,或​​者不必在我的应用程序中设置date_default_timezone_set? 有没有任何PHP功能来做到这一点?

我想尽量避免使用字符串操作。

谢谢你提前。

BR // g^

那么,对于所有与时间相关的操作,PHP希望你设置一个default时区(否则警告给出)。不过,我认为你只是在寻找一种格式化操作。

<?php 
date_default_timezone_set("UTC"); 
$source = "Mon Apr 03 00:50:15 CST 2017"; 
$dateOb = new DateTime($source); 
print_r($dateOb); 
echo $dateOb->format("Y-m-d H:i:s"); 

输出:

DateTime Object 
(
    [date] => 2017-04-03 00:50:15.000000 
    [timezone_type] => 2 
    [timezone] => CST 
) 
2017-04-03 00:50:15 
+0

太棒了!这个作品非常好!这是我正在寻找的。谢谢 ! :) – guete

你可以使用date_format,如果你只是想格式化你的日期。

$date=date_create("Mon Apr 03 00:50:15 CST 2017"); 
echo date_format($date,"Y-m-d H:i:s"); 
+0

它会给你警告:PHP警告:date_create():依靠系统的时区设置是不安全的。 – guete

你需要设置你想要的时区,通过使用date_default_timezone_set('parameter');设置时区标识符中所有日期/时间功能。在http://php.net/manual/en/timezones.php找到支持的时区列表。然后用date_default_timezone_get();来得到你给定的时区

<?php 
date_default_timezone_set('Asia/Manila'); 
date_default_timezone_get(); 
echo date('Y-m-d H:i:s') ; 
?>