9

SOでこれに似たトピックについて何百もの質問と回答を見つけましたが、特に私のニーズに一致するものはなく、困惑しています。

ymd形式の変数があり、それが前の暦日(24時間前ではなく、前の暦日)に作成されたかどうかを確認する必要があります。

すなわち。$ tDate = '12-05-2';

オブジェクトが2012年5月2日午後11時59分(保存時刻)に作成された場合、真に等しくするには、2012年5月3日午前12時1分(現在時刻)と比較する必要があります。

オブジェクトが2012年5月2日午後11時51分(保存時刻)に作成された場合、falseに等しくなるように2012年5月2日午後11時58分(現在時刻)と比較する必要があります。

これらがMySQLデータベースに保存され、フィールドから取得された場合、MySQLはそれを簡単に理解できます。ただし、この場合、その解決策はオプションではありません。

この比較は完全にphpで行う必要があります。

私はそれが風変わりな質問であることを知っています、しかしねえ、それはStackOverflowの第一人者が優れていることです!返信を楽しみにしています!

アップデート

これを次のように理解しました:

    $dTest = '12-05-02';
    $dTest = explode('-',$dTest);
    $dTest2 = date('y-m-d');
    $dTest2 = explode('-',$dTest2);

    if ($dTest[2]<$dTest2[2]){
        echo '<br />Posted Yesterday<br />';
    } else {
        echo '<br />Posted Today<br />';
    }

より効率的な解決策はありますか?うまくいくようですが、もっと最適でエレガントな解決策があるはずだと思いますか?

解決済み

$tHolder = '12-05-12';
$voteDate = date("y-m-d", strtotime($tHolder));
$today = date("y-m-d", strtotime("today"));

if ($voteDate === $today)
{
   echo "this was today's post";
}
elseif ($voteDate < $today)
{
   echo "this was previous to today";
}
4

3 に答える 3

9

まず、あなたの「解決策」がうまくいくとは思いません。今日の日付が12-06-01で、投稿が12-05-31の場合はどうなりますか?「31」>「1」であるため、間違った答えが返されます。

とにかく-正解は次のとおりだと思います。

$yesterday =date("y-m-d", strtotime("yesterday"));
$today = date("y-m-d", strtotime("today"));


if ($yesterday === $tDate)
{
   echo "this was yesterdays post";
}
elseif ($today === $tDate)
{
   echo "this was todays post";
}
else
{
    echo "this was NOT yesterday or today":
}
于 2012-05-03T06:14:26.297 に答える
3

両方の日付をUNIX時間に変換してから、整数として比較できます。

$day_start = strtotime('-1 day', mktime(0, 0, 0);
$day_finish = strtotime('-1 day', mktime(23, 59, 59);

$dT = strtotime('-1 day', $dTime)

if($dT > $day_start && $dT < $day_finish) {
 var_dump($dT);
} else {
 exit;
}
于 2012-05-03T06:15:48.867 に答える
3

実際に「X日前に投稿」を探している場合:

$datetime1 = new DateTime('2012-05-01');
$datetime2 = new DateTime('2012-05-02');
$interval = (int)$datetime1->diff($datetime2)->format('%a');
switch ($interval) {
    case 0:
        echo "Posted Today<br />";
        break;
    case 1:
        echo "Posted $interval day ago<br />";
        break;
    default:
        echo "Posted $interval days ago<br />";
}
于 2012-05-03T06:20:05.323 に答える