0

登録ページを作成しました。ユーザーが送信ボタンをクリックすると、アクティベーション リンクがメールに送信され、それに応じてタイムスタンプがデータベースに保存されます。ユーザーがそのアクティベーション リンクをクリックした場合、そのリンクが 24 時間前または後にクリックされたかどうかを確認する必要があります。私のコード:-

function confirmEmail($activation_code){
        $this->load->database();
        $this->load->helper('date');
        echo "activation link will be checked and accordingly flag will be set.";
        $activation_sent_timestamp=$this->db->query("SELECT activation_timestamp FROM tbl_user_registration WHERE email_verification_code='$activation_code'");
        foreach($activation_sent_timestamp->result() as $res){
            $activation_time_from_db=$res->activation_timestamp;
        }
        echo $activation_time_from_db."\n\r";
        $now = time();
        $human = unix_to_human($now);
        echo $human;
        $difference = ($human-$activation_time_from_db);
        if($difference < 24) {
               echo "correct"
        }
        else echo "Link expired";
    }

コードイグナイターを使用しています。これを行うにはどうすればよいですか。このコードはエラーを表示していませんが、これが 24 時間を計算する正しい方法かどうかはわかりません。確認していますが、何も得られませんでした。コードを確認してください。

解決済み........ :)

4

6 に答える 6

1

unix_to_human()は、人間が読める形式のタイムスタンプを返すだけです

最も簡単な方法は、両方のタイム スタンプの違いを見つけ、時間に変換し、24 時間未満かどうかを確認することです。

于 2012-07-04T08:50:07.593 に答える
0

クエリでmysqltimediff関数を使用できます。
私がこの投稿で答えたようにあなたの状況を見てあなたはこれを行うことができます

mysqlとphpで時間の空きブロックを見つけますか?

于 2012-07-04T09:08:45.787 に答える
0
$time = time();

$seconds = 86400 // seconds of 24 Hours

SELECT * FROM tbl_user_registration WHERE ( $time - UNIX_TIMESTAMP( activation_timestamp ) >= $seconds )
于 2012-07-04T09:10:34.900 に答える
0

差分の計算に diff を使用できます。また、時間形式を変更することもできます

$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');
于 2012-07-04T08:49:41.130 に答える
0

両方のタイムスタンプを php日付 ('Ymd')形式に変換してから、 date_diffを試してください

于 2012-07-04T08:49:52.283 に答える
0

あなたは使いたいかもしれませんdate_diff

ここを参照してください: DATE_DIFF()

于 2012-07-04T08:47:31.553 に答える