【问题标题】:Convert date using strtotime from DOMDocument element使用 DOMDocument 元素中的 strtotime 转换日期
【发布时间】:2010-01-15 09:59:05
【问题描述】:

在使用 curl 获取 HTML 文件后,我正在使用 DOMDocument 解析一些数据。代码如下所示

$dom = new DOMDocument(); @$dom->loadHTML($content); $tables = $dom->getElementsByTagName('table'); $rows = $tables->item($tblNum)->getElementsByTagName('tr'); foreach ($rows as $row) { $cols = $row->getElementsByTagName('td'); $var = $cols->item(1)->nodeValue; // The problem is here }

我无法使用 strtotime 将$var 转换为时间戳。我不知道为什么,我知道$cols->item(1)->nodeValue 返回了我想要的值,我什至尝试将其分解并内爆到另一个变量中,但我仍然无法使用 strtotime 将其转换为时间戳。我也直接测试过值

strtotime('11 Jan 2010');

它确实返回了一个时间戳,那么,我该怎么办?

【问题讨论】:

  • 向我们展示它返回的内容。您要转换的日期。
  • nodeValue 返回 2010 年 1 月 11 日
  • 然后使用var_dump()检查它的类型。看起来不是字符串。
  • 它实际上返回了字符串(13)
  • 值周围可能有空格(例如换行符)。修剪它。

标签: php domdocument strtotime


【解决方案1】:

我无法使用 php 5.3.1/winxp 重现该问题

$content = '<html><head><title>...</title></head><body>
  <table>
    <tr><td>X</td><td>12 Jan 2010</td></tr>
  </table>
</body></html>';
$tblNum = 0;

$dom = new DOMDocument();
@$dom->loadHTML($content);
$tables = $dom->getElementsByTagName('table');
$rows = $tables->item($tblNum)->getElementsByTagName('tr');

foreach ($rows as $row) {
  $cols = $row->getElementsByTagName('td');
  $var = $cols->item(1)->nodeValue;
  echo date('Y-m-d H:i:s', strtotime($var)), "\n";
}

打印2010-01-12 00:00:00

【讨论】:

  • 我在 Linux 上使用 PHP 5.2.10,稍后我将在 Windows 中测试代码
  • 我用 PHP 5.2.12-pl0-gentoo 得到了同样的结果
  • 显然,有一个  在值之前,您可以尝试通过添加   来重现问题在日期前面,所以,最后,我只使用 $content=str_replace(' ', '', $content);因为 $var=str_replace(' ', '', $var) 不起作用。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 2021-09-13
相关资源
最近更新 更多