代码之家  ›  专栏  ›  技术社区  ›  hsz

将rss pubdate转换为时间戳

  •  12
  • hsz  · 技术社区  · 14 年前

    如何转换日期字符串 Mon, 24 May 2010 17:54:00 GMT 从RSS提要到PHP中的时间戳?

    5 回复  |  直到 6 年前
        1
  •  10
  •   Geoff Adams    14 年前

    您可以使用内置功能 strtotime() . 它将日期字符串作为第一个参数,并返回一个Unix时间戳。

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

        2
  •  13
  •   Agus Puryanto    13 年前

    试试这个:

    $pubDate = $item->pubDate;
    $pubDate = strftime("%Y-%m-%d %H:%M:%S", strtotime($pubDate));
    
        3
  •  7
  •   Felix Eve    6 年前

    strtotime 不适用于不同的时区。

    我刚刚编写了这个函数来将rss pubdates转换为时间戳,它确实考虑了不同的时区:

    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;
    }
    
        4
  •  0
  •   Robert    11 年前

    如果rss源中的pubdate的时区不是 + 0000 . 问题在于$modifier,它必须被逆转。要修复这两行,必须添加,因此行:

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

    成为:

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

    只是为了澄清修改——例如,如果 脓疮 2013年5月22日星期三17:09:36+0200 然后行

    $timestamp = strtotime($strtotimearg, $timestamp
    

    将时间缩短两个小时,而不是将其重新设置为 + 0000 时区如预期。

    这个 2013年5月22日星期三17:09:36+0200 显示此处显示的时间是格林尼治标准时间+2。

    代码不能正常工作,因此时间增加了两个小时。 2013年5月22日星期三19:09:36+0000 而不是 2013年5月22日星期三15:09:36+0000 应该是这样的。

        5
  •  -3
  •   Davinder Singh    11 年前
    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;  
    }
    

    试试这个功能