这个
echo date('g:iA \o\n D, M jS', strtotime('2018-02-23 07:42:22'));
回应这个
7:42AM on Fri, Feb 23rd
但是这个
function dateformat($source, $format = "Y-m-d")
{
if(empty($source) || $source == '0000-00-00') return false;
$date = date($format, strtotime($source));
if(date('Y', strtotime($date)) == '1969' && strpos($source, '1969') === false) return false;
if(date('Y', strtotime($date)) == '1970' && strpos($source, '1970') === false) return false;
return $date;
}
echo dateformat('2018-02-23 07:42:22', 'g:iA \o\n D, M jS');
回应这个
虽然这个
echo dateformat('2018-02-23 07:42:22', "g:iA \o\n D, M jS");
回应这个
7:42AM o Fri, Feb 23rd
换句话说,使用单引号,我得到false
的返回值。使用双引号,函数参数正确传递\o
,但不传递\n
。
各种不同的测试都会产生不可预测的结果。我认为这与保留\n
有关,所以我尝试\o\o
进行测试。返回false
,而\o\n
成功通过\o
。
我这种方式多年来一直在使用这个功能,刚才注意到了这个问题,所以我想也许这可能与我最近从Dreamweaver
切换到Visual Studio Code
有关,但是我将这些测试结果转移到PHP Sandbox并得到相同的结果,因此它不是代码编辑器问题。
如果没有解决方案(这是我的首选),是否至少有一个解释是什么导致了这种行为?
UPDATE :总结一个主要问题,我不能将多个反斜杠字符传递给函数的参数。如果我这样做,它将返回false。但是我想做的任何事情都可以在原生的php日期函数中正常工作。
答案 0 :(得分:2)
对于单引号字符串,转义字符为文字\o\n
而且返回false
,您的函数也是如此:
$date = date($format, strtotime($source));
对于双引号字符串,字符会被转义,但\n
是换行符的转义序列,因此您获得的换行符不是n
。在页面上执行查看源,您将看到:
7:42AM o
Fri, Feb 23rd
要纠正此问题,请使用双重转义:
"g:iA \o\\n D, M jS"