【发布时间】:2018-02-23 16:17:50
【问题描述】:
这个
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 并得到相同的结果,所以这不是代码编辑器的问题。
如果没有解决方案(这将是我的首选),是否至少可以解释导致这种行为的原因?
更新:总结主要问题,我不能将多个反斜杠字符传递给函数的参数。如果我这样做,它将返回 false。但是我想做的任何事情都可以在原生 php 日期函数中正常工作。
【问题讨论】:
-
也许
\n有某种特殊含义? -
不,我已经说过了。
-
参见 OP 回复:
\o\o测试。 -
您解决了在字符串中注入换行符,然后尝试通过
strtotime运行它? -
var_dump($date);exit;在函数的第二行之后。你会看到它工作得很好。这是因为您在date()调用中删除了年份上下文,然后在结果上运行strtotime()。另外,请不要对那些试图帮助你的人如此不屑一顾。任何时候有人说他们已经死了,确定某个问题不是某处,十分之九,猜猜问题出在哪里?
标签: php parameter-passing backslash