4

我正在调用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:这个问题是我是个白痴的结果,但是发布的每个人都做了一些很好的调试。如果您有兴趣,请阅读答案。

4

3 回答 3

4

首先你检查返回值strtotime($user->last_seen)

如果strtotime($user->last_seen)返回false$user->last_seen可能为空或不是有效的日期和时间格式

var_dump(strtotime($user->last_seen))
于 2013-06-13T07:26:07.603 回答
1

哦,天哪……我要为此踢自己。我做了一个项目,我发现在我的路由方案中我有这个Ctrl+Flast_seen

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

夹着尾巴走开……

于 2013-06-13T07:37:30.907 回答
1

您的问题很可能不在 select 子句中,而是在您存储数据的地方。

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

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

代替

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

所以你需要在那里丢失引号......

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

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

于 2013-06-13T07:30:11.227 回答