PHP:为什么strtotime()返回“NOW()”?

时间:2013-06-13 07:14:51

标签: php mysql date datetime

我在格式化的日期时间字符串上调用strtotime(),由于某种原因,它总是返回NOW() ...

如果格式化的日期时间字符串(存储在last_seen属性中)为:2013-06-13 07:13:04

我写下面的代码:

echo $user->last_seen;
echo date('F j, Y', strtotime($user->last_seen));

我得到的输出是:

NOW() January 1, 1970

这里到底出了什么问题?这绝对不是预期的结果。该字符串存储在MySQL数据库中,如果这有任何区别的话。

编辑按要求,用于在数据库中创建属性的代码是:

$user->last_seen = date('Y-m-d H:i:s');
$user->save;

编辑2:按要求,用户拉我们想要的用户表的代码是:

$user = User::find($user_id);

(不是很有帮助,哈哈)。

编辑3 如果我var_dump($user->last_seen)结果是:

object(Laravel\Database\Expression)#40 (1) { ["value":protected]=> string(5) "NOW()" }

编辑4:如果我回显var_dump(strtotime($user->last_seen)),结果是:

bool(false)

编辑5:这个问题是我成为白痴的结果,但发布的每个人都做了一些很好的调试。如果您有兴趣,请阅读答案。

3 个答案:

答案 0 :(得分:4)

首先,您检查strtotime($user->last_seen)

的返回值

如果strtotime($user->last_seen)返回false,那么$user->last_seen可能为空或无效Date and Time Formats

var_dump(strtotime($user->last_seen))

答案 1 :(得分:1)

您的问题很可能不在select子句中,而是存放数据的位置。

当您在数据库中插入时间时,您可能正在执行

insert into myTable (fieldname) values ('now()');

而不是

insert into myTable (fieldname) values (now());

所以你需要在那里丢失报价......

您不是将时间存储在数据库中,而是存储字符串now() ...

您实际可以做的最好的事情是将数据库列类型从varchar更改为DateTime,因此即使数据库也知道它是DateTime。然后你就不必在PHP中将它强制转换回DateTime。

答案 2 :(得分:1)

亲爱的上帝啊......我要为这一个踢自己。我为Ctrl+F做了一个项目范围last_seen,我发现在我的路由方案中我有这个:

Route::filter('before', function() {
    if (Auth::check()) {
        $user = Auth::user();
        $user->last_seen = DB::raw('NOW()');
        $user->save();
    }
});

双腿之间的尾巴走开......