首页 > 解决方案 > 当 substr() 返回字符串时,strtotime() 函数工作不一致

问题描述

substr()用来从长文本中获取日期字符串,使用该preg_match()函数找到日期。然后我使用strtotime()将此字符串转换为纪元时间戳,因为我需要与已经采用这种格式的另一个日期进行比较。

它似乎工作起来很不一致,经过一些测试,我似乎无法找到错误的来源。虽然返回的日期字符串substr()始终正确,但该strtotime()函数并不总是有效。请注意,它substr()是从一个较大的字符串中提取的,它本身来自数据库。问题可能来自隐藏字符或格式?

<?php
$DateString = substr($text, $matches[sizeof($matches) - 1][1] - 22, 17); //$DateString = the expected '2018-03-21 08:04' when echo
$DateString_hardcoded = '2018-03-21 08:04';

$DateEpoch = strtotime($DateString); //$DateEpoch is null
$DateEpoch_hardcoded = strtotime($DateString_hardcoded); //$DateEpoch_hardcoded return the expected 1521619440
?>

我不明白的是,有时字符串日期会使用完全相同的代码正确转换。例如,当

substr($text, $matches[sizeof($matches) - 1][1] - 22, 17) = '2010-08-23 16:10', $DateEpoch = 1282579800

正如预期的那样。

标签: phpstrtotimesubstr

解决方案


结果我只是不知道如何计算,我必须为 substr() 的起始索引做 -21 而不是 - 22。我最终得到了一个很好的约会,但一开始就有空白。我不知道为什么它在回显时没有出现。解决了。


推荐阅读