我在网络客户端遇到了一些非常奇怪的行为,我正在努力。基本上我将过期日期作为字符串传递给我,我将其解析为DateTime,以便将其与当前时间进行比较(以确定某些事物是否已过期。)
下面是有问题的代码段(注意:$ expiration设置在此代码段之上,我只是用我实际打算使用的值重写它)
$expiration = DateTime::createFromFormat("y-m-d h:i:s", $expiration);
$now = date('y-m-d h:i:s', time());
Common::log("before : ", $expiration->date);
//TODO figure out why this common log has to be here or this doesnt work
Common::log("expiration : ", $expiration);
Common::log("after : ", $expiration->date);
if($now > $expiration->date) $data['status'] = 14;
Common :: log是一个内部函数,只是执行print_r
static function log ($msg, $data=null)
{
error_log ($msg . ($data ? print_r ($data, true) : ''));
}
该代码片段在终端中输出的内容(我正在查看最新版本的内容)如下所示。
[09-Jun-2015 17:03:19 America/Indiana/Indianapolis] before :
[09-Jun-2015 17:03:19 America/Indiana/Indianapolis] expiration : DateTime Object
(
[date] => 2015-06-09 06:16:55
[timezone_type] => 3
[timezone] => America/Indiana/Indianapolis
)
[09-Jun-2015 17:03:19 America/Indiana/Indianapolis] after : 2015-06-09 06:16:55
如果我只是注释掉或删除记录$expiration
变量的那行,那么before :
日志显示,$expiration->date
计算为空字符串,我的逻辑在下面进行比较休息。在这里发生什么,为什么取出中间日志会对$expiration->date
的价值产生影响?这是非常令人困惑的,我将不胜感激任何人都可以提供的任何帮助 - 我不想使用有效的代码,如果我不明白为什么它的工作原理。
答案 0 :(得分:2)
说实话,我不确定为什么会这样。它可能与类构造函数有关。但是,没有关于以这种方式使用 - >日期的文档。所以,而不是做这样的事情:
Common::log("before : ", $expiration->date);
以这种方式做事:
Common::log("before : ", $expiration->format('y-m-d h:i:s'));
换句话说,您告诉PHP以您选择的输出格式显示日期(可能与您创建的输入格式不同)。