Timestamp RSS pubdate dönüştürmek

5 Cevap php

Nasıl PHP bir zaman damgası için bir tarih dizesi Mon, 24 May 2010 17:54:00 GMT RSS beslemesi dönüştüğünde için?

5 Cevap

Sen yerleşik işlevini kullanabilirsiniz strtotime(). Bu ilk argüman olarak bir tarih dizesi alır ve bir Unix zaman damgasını döndürür.

http://php.net/manual/en/function.strtotime.php

Bu deneyin:

$pubDate = $item->pubDate;
$pubDate = strftime("%Y-%m-%d %H:%M:%S", strtotime($pubDate));

strtotime, farklı zaman dilimleri ile çalışmıyor.

Ben sadece dikkate farklı saat dilimleri sürer damgaları RSS pubDates dönüştürmek için bu işlevi yazdım:

    function rsstotime($rss_time) {
        $day = substr($rss_time, 5, 2);
        $month = substr($rss_time, 8, 3);
        $month = date('m', strtotime("$month 1 2011"));
        $year = substr($rss_time, 12, 4);
        $hour = substr($rss_time, 17, 2);
        $min = substr($rss_time, 20, 2);
        $second = substr($rss_time, 23, 2);
        $timezone = substr($rss_time, 26);

        $timestamp = mktime($hour, $min, $second, $month, $day, $year);

        date_default_timezone_set('UTC');

        if(is_numeric($timezone)) {
            $hours_mod = $mins_mod = 0;
            $modifier = substr($timezone, 0, 1);
            $hours_mod = (int) substr($timezone, 1, 2);
            $mins_mod = (int) substr($timezone, 3, 2);
            $hour_label = $hours_mod>1 ? 'hours' : 'hour';
            $strtotimearg = $modifier.$hours_mod.' '.$hour_label;
            if($mins_mod) {
                $mins_label = $mins_mod>1 ? 'minutes' : 'minute';
                $strtotimearg .= ' '.$mins_mod.' '.$mins_label;
            }
            $timestamp = strtotime($strtotimearg, $timestamp);
        }

        return $timestamp;
}

Rss beslemesinde pubDate +0000 dışında timezone olsaydı rsstotime () işlevi düzgün çalışmadı. Sorun $ değiştirici ile, bu tersine çevrilmesi vardı. Iki satır eklenecek vardı bunu düzeltmek, böylece satır için:

$modifier = substr($timezone, 0, 1); 

oldu:

$modifier = substr($timezone, 0, 1);        
if($modifier == "+"){ $modifier = "-"; } else
if($modifier == "-"){ $modifier = "+"; }

Sadece değişiklik netleştirmek için - örneğin eğer pubDate {idi [(1)]} daha sonra satır

$timestamp = strtotime($strtotimearg, $timestamp

beklendiği gibi +0000 timezone için resetted değil iki saat zaman mahsup.

Wed, 22 May 2013 17:09:36 +0200 Burada yer alan zaman zaman dilimi GMT +2 olduğunu gösterir.

Kodu düzgün çalışması ve zaman fazladan iki saat ilave, bu yüzden zaman Wed, 22 May 2013 19:09:36 +0000 oldu, yerine Wed, 22 May 2013 15:09:36 +0000 olması gerektiği gibi değildi.

function pubdatetotime($pubDate) {

$months = array('Jan' => '01', 'Feb' => '02', 'Mar' => '03', 
'Apr' => '04', 'May' => '05', 'Jun' => '06', 
'Jul' => '07', 'Aug' => '08', 'Sep' => '09', 
'Oct' => '10', 'Nov' => '11', 'Dec' => '12');

$date = substr($pubDate, 5,11);
$year = substr($date, 7,4); 
$month = substr($date, 3,3);
$d =  substr($date, 0,2);

$time = substr($pubDate, 17,8);

return $year."-".$months[$month]."-".$d." ".$time;  
}

Bu fonksiyonu deneyin