1

我有一个 PHP 脚本,它从 RSS 提要中提取并根据事件生成一系列输出。该脚本一直运行良好,直到上周夏令时发生变化。

该脚本正在处理具有以下结构的日期的 RSS 提要:

发布日期:格林威治标准时间 2013 年 4 月 4 日星期四 19:05:00

我需要为每一天和每一时间创建不同的 php 脚本,所以我使用了以下内容:

$expiry = $item->pubDate;
$expiryLenght = strlen("$expiry");
$timeStart = $expiryLenght - 12;
$time = substr("$expiry","$timeStart", 5);
$hour = substr("$time",0, 2);
$day_alpha = substr("$expiry",0, 3);
$day = substr("$expiry",5, 2);
$month = substr("$expiry",8, 3);
$year = substr("$expiry", 12, 4);
$month = strtolower($month);
$month_num = monthNum($month);

对我来说重要的部分是'$hour' 行。我需要尝试调整它以适应夏令时。pubDate 始终在未调整的 GMT 中。

我正在考虑沿着定义夏令时的路线前进,如果在时间范围内,则将小时加 1。但是,我不确定这是一个好的解决方案。

戴夫,任何帮助将不胜感激。


在评论的帮助下,我最终使用了这个

$expiry1 = $item->pubDate;

$expiry = date('D, d MYH:i:s \off', strtotime($expiry1 . " Europe/Dublin"));

有点骇人听闻,但它将 Expiry 恢复为以前的格式,这意味着其余代码可以解决它。

4

2 回答 2

0
<?php
$expiry = "Thu, 04 Apr 2013 19:05:00 GMT";
echo date('l jS \of F Y h:i:s A', strtotime($expiry . " America/New_York"));
?>
于 2013-04-04T09:11:35.057 回答
0

我现在正在工作,所以无法对此进行测试,但我相信您想按照以下方式做一些事情:

<?php
$timestring = 'Thu, 04 Apr 2013 19:05:00 GMT';
$mytimezone = new DateTimeZone('Pacific/Nauru');
$datetime = date_create_from_format('D, d M Y h:i:s T', $timestring, $mytimezone);

echo $datetime->format('Y-m-d H:i:sP');

这将根据您指定的格式化字符串创建一个 DateTime 对象,但使用您选择的时区。因此,您选择时区,它会从您的 RSS 提要中解析日期/时间,并将其转换为您选择的时区。

它的代码也比您当前正在做的要少得多。:-)

于 2013-04-04T09:13:53.620 回答