Simple HTML DOM库用于从网页中提取时间戳。然后使用strtotime
将提取的时间戳转换为MySQL时间戳。
问题:当strtotime()
在有效时间戳上使用时,会返回NULL
(请参阅2:
)。但是,当第二个示例中未使用Simple HTML DOM时,一切正常。
发生了什么,以及如何解决这个问题?
输出:
1:2013-03-03, 12:06PM
2:
3:1970-01-01 00:00:00
的var_dump($时间)
string(25) "2013-03-03, 12:06PM"
PHP
include_once(path('app') . 'libraries/simple_html_dom.php');
// Convert to HTML DOM object
$html = new simple_html_dom();
$html_raw = '<p class="postinginfo">Posted: <date>2013-03-03, 12:06PM EST</date></p>';
$html->load($html_raw);
// Extract timestamp
$time = $html->find('.postinginfo', 0);
$pattern = '/Posted: (.*?) (.).T/s';
$matches = '';
preg_match($pattern, $time, $matches);
$time = $matches[1];
echo '1:' . $time . '<br>';
echo '2:' . strtotime($time) . '<br>';
echo '3:' . date("Y-m-d H:i:s", strtotime($time));
PHP(工作,没有简单的HTML DOM)
// Extract posting timestamp
$time = 'Posted: 2013-03-03, 12:06PM EST';
$pattern = '/Posted: (.*?) (.).T/s';
$matches = '';
preg_match($pattern, $time, $matches);
$time = $matches[1];
echo '1:' . $time . '<br>';
echo '2:' . strtotime($time) . '<br>';
echo '3:' . date("Y-m-d H:i:s", strtotime($time));
输出(正确)
1:2013-03-03, 12:06PM
2:1362312360
3:2013-03-03 12:06:00
的var_dump($时间)
string(19) "2013-03-03, 12:06PM"
答案 0 :(得分:2)
根据您的var_dump()
,您从HTML代码中提取的$time
字符串的长度为 25 。
您看到的字符串,"2013-03-03, 12:06PM"
,只有 19 个字符。
那么,那6个额外的角色在哪里?嗯,这很明显,真的:你要解析的字符串真的是"<date>2013-03-03, 12:06PM"
。但是当您将其打印到HTML文档中时,浏览器会将<date>
解析为HTML标记。
要查看它,请使用浏览器中的“查看源”功能。或者,很多更好,在打印任何非假设的变量以包含HTML代码时使用htmlspecialchars()
。