Php 将RSS pubDate转换为时间戳
如何将日期字符串Php 将RSS pubDate转换为时间戳,php,rss,timestamp,pubdate,Php,Rss,Timestamp,Pubdate,如何将日期字符串Mon,2010年5月24日17:54:00 GMT从RSS源转换为PHP中的时间戳?您可以使用内置函数strotime()。它将日期字符串作为第一个参数,并返回Unix时间戳 试试这个: $pubDate = $item->pubDate; $pubDate = strftime("%Y-%m-%d %H:%M:%S", strtotime($pubDate)); strotime不适用于不同的时区 我刚刚编写了这个函数来将RSS pubDates转换为时间戳,它考虑了
Mon,2010年5月24日17:54:00 GMT
从RSS源转换为PHP中的时间戳?您可以使用内置函数strotime()
。它将日期字符串作为第一个参数,并返回Unix时间戳
试试这个:
$pubDate = $item->pubDate;
$pubDate = strftime("%Y-%m-%d %H:%M:%S", strtotime($pubDate));
strotime
不适用于不同的时区
我刚刚编写了这个函数来将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;
}
如果rss源中的pubDate的时区不是+0000,则rsstotime()函数无法正常工作。问题在于$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显示此处显示的时间为时区GMT+2
代码无法正常工作,并在时间上增加了两个小时,因此时间变为2013年5月22日星期三19:09:36+0000,而不是本应的2013年5月22日星期三15:09:36+0000
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;
}
试试这个功能这个怎么样?
date\u从\u格式创建\u(DateTime::RSS,$item->pubDate)代码>
我认为这是最简单的解决办法 当字符串包含时区时,strotime似乎会给出奇怪的结果。例如,“Sat,2010年9月21日00:00GMT”,我获得了1285372800(25-09-2010)的优异成绩!很有魅力