6

私はいくつかのツイートを取り込んでおり、それらが今日、昨日、またはその前に届いたかどうかを出力したいと思います。これが私が使用しているコードです(これは機能しません)。ifとelseifをスキップし、 elseに直接移動します

date_default_timezone_set("America/New_York");
$time = $block["created_at"];
$time = strtotime($time);

if(date("now") == date("m-d-Y", $time)) {
    $time = date("g:ia", $time);
}
else if(date(strtotime("-1 day")) == date("m-d-Y", $time)) {
    $time = "Yesterday at" + date("g:ia", $time);
}
else {
    $time = date("m-d-Y g:ia", $time);
}

絶対に理想的には、タイムスタンプが過去6日以内の場合、曜日と時刻が表示され、それより古いものには日付が表示されるのであれば、それも気に入っています。

したがって、ストリームは次のようになります(日付は降順で並べ替えられます)。

[...] 9:53 am
[...] 7:02am
[...]昨日11:24pm
[...]月曜日3:45pm
[...]2013年1月2日

私のコードがどこでうまくいかないかについて何か考えはありますか?ありがとう!

4

2 に答える 2

6

コードは次のようになります。

if(date("m-d-Y") == date("m-d-Y", $time)) {
    $time = date("g:ia", $time);
}
else if(date("m-d-Y", strtotime("-1 day")) == date("m-d-Y", $time)) {
    $time = "Yesterday at" + date("g:ia", $time);
}
else {
    $time = date("m-d-Y g:ia", $time);
}

説明

date()—現地時間/日付をフォーマットします。指定された整数のタイムスタンプ、またはタイムスタンプが指定されていない場合は現在の時刻を使用して、指定されたフォーマット文字列に従ってフォーマットされた文字列を返します。つまり、タイムスタンプはオプションであり、デフォルトの値はtime()。です。

どこが間違っていますか?

最初にフォーマットを渡し、次にタイムスタンプをdate()関数に渡す必要があります。続きを読む

于 2013-01-09T16:06:38.290 に答える
2

このstrtotime関数は、さまざまな文字列を解析できます。

echo date("D Y-m-d H:i:s");                               // Wed 2013-01-09 21:33:07
echo date("D Y-m-d H:i:s", strtotime("today 00:00" ));    // Wed 2013-01-09 00:00:00
echo date("D Y-m-d H:i:s", strtotime("yesterday 00:00")); // Tue 2013-01-08 00:00:00
echo date("D Y-m-d H:i:s", strtotime("-6 day 00:00" ));   // Thu 2013-01-03 00:00:00
echo date("D Y-m-d H:i:s", strtotime("-100 day 00:00" )); // Mon 2012-10-01 00:00:00

ここで行う必要があるのは、指定されたタイムスタンプを上記と降順で比較することだけです。

function formatDate($time) {
    if ($time >= strtotime("today 00:00")) {
        return date("g:i A", $time);
    } elseif ($time >= strtotime("yesterday 00:00")) {
        return "Yesterday at " . date("g:i A", $time);
    } elseif ($time >= strtotime("-6 day 00:00")) {
        return date("l \\a\\t g:i A", $time);
    } else {
        return date("M j, Y", $time);
    }
}

echo formatDate(time());                 // 9:42 PM
echo formatDate(strtotime("-1 day"));    // Yesterday at 9:42 PM
echo formatDate(strtotime("-6 day"));    // Thursday at 9:42 PM
echo formatDate(strtotime("-100 day"));  // Oct 10, 2012

strtotime()タイムスタンプ (整数) を返し、文字列を返すことに注意してくださいdate()。この関数は、タイムスタンプとタイムスタンプを比較します。

于 2013-01-09T16:43:24.237 に答える