0

2 つの日付の比較に問題があります。ユーザーは Datepicker から形式 ('Ymd') で日付を選択します。入力が現在の日付と等しくない場合、エラー メッセージが表示され、それ以外の場合は出力が表示されます。

私はこのコードを持っています:

$today = date("Y-m-d");
$date = $_REQUEST['selected_date']; // date selected
$first = strtotime($today);             
$second = strtotime($date);

if ($first != $second){
    //error message 
}else{
    //some code
}       

これはローカルでは正常に機能しますが、アップロードしようとすると機能しなくなります。代わりに、現在の日付ではなく、前の日付を受け入れることができます。

4

3 に答える 3

3

おそらく、タイムゾーンは、サーバーとローカル マシンの設定が異なっている可能性があります。

$firstとの値を出力してみてください$second

古いスタイルの PHP 日付関数 (など)date_default_timezone_set()を使用している場合は、PHP で使用されるタイムゾーンを設定できます (設定する必要があります)。datestrtotime

DateTime&クラスを新しいコードで使用することをお勧めしDateTimeZoneますが、特に複数のタイムゾーンに関係する何かを行っている場合は、より使いやすくなっています。

于 2012-08-14T03:05:55.040 に答える
0

サーバーがリクエストの送信元とは異なるタイムゾーンにある可能性はありますか? これがミスマッチの原因になると思います。

于 2012-08-14T03:07:08.520 に答える
0

うまくいけば、私はあなたの状況を正しく理解しています。date()これを直接攻撃すると、サーバーのタイム ゾーン (通過する) がクライアントのタイム ゾーンと異なるため、多くの場合失敗します。この問題を回避するには、javascript を介してクライアント時刻をサーバーに送信する必要があります。jQuery の例は次のようになります。

var date = new Date();

$.post("index.php", { today: (today.getMonth() + 1) + "/" + today.getDate() + "/" + today.getFullYear()}, function(data) {

alert(data); //server response here

});

サーバーでは、クライアントの今日の日付を を介して文字列として取得します$_POST['today']。次に、それをどう処理するかを決定し、クライアントに出力できます。

あるいは、あなたが説明している問題は、サーバー上で何かをしたくない限り、サーバーに送信せずにJavaScriptだけで解決できます

于 2012-08-14T03:15:48.207 に答える