2013-04-04 33 views
1

我有一個PHP腳本,它從RSS提要中提取並根據事件產生一系列輸出。直到上週,當夏令時發生變化時,該腳本一直工作正常。PHP - 從RSS提要中調整小時以適應夏令時

腳本正在關閉其在以下結構的日期RSS提要:我需要爲不同的PHP腳本星期四,2013年4月4日19時05分00秒GMT

pubdate的每天和每次,所以我用了以下內容:

$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); 

對我來說重要的部分是'$小時'行。我需要嘗試調整夏令時。 pubDate始終處於GMT未調整狀態。

我正在考慮定義夏令時期的路線,如果在規定的時間範圍內,請在小時內加1。但是,我不確定這是一個好的解決方案。

任何幫助將不勝感激, 戴夫。


從註釋太大的幫助後,我結束了使用此

$expiry1 = $item->pubDate; 

$到期=日期( 'd,d MYH:我:■\關',的strtotime($ expiry1「。歐洲/都柏林「));

一個hackjob的位,但它把過期恢復到它以前的格式,這意味着代碼的其餘部分可以解決它。

+0

您應該從這些值構建一個日期對象並使用它。 – deed02392 2013-04-04 09:02:34

+0

@ deed02392同意。看看這個帖子的靈感http://philsturgeon.co.uk/blog/2012/08/why-php-datetime-rocks – danneth 2013-04-04 09:07:10

+0

僅靠小時是不夠的。在每個新的一天的第一個小時裏,你會在一天之內出現,而在夏季每個月的第一天裏,你會出現一個月。 – bcmcfc 2013-04-04 09:10:04

回答

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")); 
?> 
+0

非常感謝。真的很有用!非常感謝! – 2013-04-04 10:22:53

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源中分析日期/時間並將其轉換爲您選擇的時區。

它比您目前正在做的還少了很多代碼。 :-)

+0

非常感謝。我的PHP技能並不好,所以我無法讓腳本的其餘部分工作,即使這很好。真的很感激它! – 2013-04-04 10:23:27

+0

爲了使它與腳本的其餘部分一起工作,您可能只需要使用適當的下列選項替換對'$ hour'和'$ datetime-> format('H')'等參數的引用: http://www.php.net/manual/en/function.date.php – deed02392 2013-04-04 10:34:14