Unix时间戳到PHP年月和日转换关闭

时间:2016-03-03 03:02:39

标签: php datetime unix-timestamp

我们正在将域名迁移到我们最近购买的新专用服务器。新服务器的时区导致我们的附件php代码出现一些问题。

我们的论坛软件使用以下文件夹结构来存储附件:

/的public_html /论坛/文件/ 2016/2月/ 14 / [文件名]

年份,月份和日期是从文件上载时间戳获得的,该时间戳是Unix时间戳,例如“1455426488”。然后使用以下php代码将此时间戳转换为年,月和日:

$date = getdate((int)$attachment['filetime']);
$filepath = $config['upload_path'] . '/' . (string)$date['year'] . '/' . $date['month'] . '/' . (string)$date['mday'];

这在我们的旧服务器和之前的服务器上运行良好,但在新服务器上,“day”在转换后落后1天或提前一天,这导致“2月14日”文件上传到最后“2月13日”文件夹或“2月15日”。请记住,文件上传时间1455426488 in unix timestamp是02/14/2016 at UTC Timezone。

有人对如何解决此问题有任何建议吗?这是我们论坛系统的一个关键部分,因此如果没有为它提供解决方案,我们将无法迁移到新服务器。

谢谢,

皮特

BTW,旧服务器和新服务器都使用“America / Chicago”作为他们的时区(CST)。

2 个答案:

答案 0 :(得分:0)

您可以使用DateTime类来转换日期。

$date = new DateTime(null, new DateTimeZone('America/Chicago'));
$date->setTimeStamp((int)$attachment['filetime']);
$filepath = $config['upload_path'] . '/' . $date->format('Y') . '/' . $date->format('F') . '/' . $date->format('d');

答案 1 :(得分:0)

我发现了问题!看起来以下行已经发现它进入download / file.php文件:

date_default_timezone_set('GMT');

此行在原始文件中不存在,因此删除它解决了问题!我仍然不确定这条线是如何添加的,但它解释了这种奇怪的行为。

谢谢, 皮特