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:要求により、必要なユーザーを使用して users テーブルをプルするために使用されるコードは次のとおりです。

$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

あなたの問題はおそらくselect句ではなく、データを保存する場所にあります。

データベースに時刻を挿入するときは、おそらく次のことを行っています

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

それ以外の

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

したがって、そこで引用符を失う必要があります...

データベースに時間を保存していませんが、文字列now()...

実際にできる最善のことは、データベースの列の型を から に変更することですvarcharDateTimeこれにより、データベースでさえそれが DateTime であることがわかります。次に、PHP で DateTime にキャストし直す必要がなくなります。

于 2013-06-13T07:30:11.227 に答える
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 に答える