2

このような日付を保存するスクリプトがあります。

$date = date('i')+50;

これをデータベースに保存すると、1382851302 のようなものが得られました。これは、> または < を使用するだけで過去と未来を比較するのに最適です。

管理者用のスクリプトの他の部分では、jQuery datepicker に基づくフィルターを使用しています。問題は、そこで選択した日付を同じdate()形式に変換できないため、日付を比較できることです。ここでは時間が何らかの形で関係していると思います(i)。

これが私の悪い試みです。

$iniciopub = date('Y-m-d',strtotime($_POST['iniciopub']));
 
$finpub = date('Y-m-d',strtotime($_POST['finpub']));

これは機能していません..(「1970」を保存するだけです)

これを試したら..

  $iniciopub = date($_POST['iniciopub']);
     
    $finpub = date($_POST['finpub']);

私はその日を保存するだけです。フォーマットは00/00/0000のようなものなので、/はintを保存できるため、値を「カット」していると思います。必要な形式でわかるように、データベースでは数字だけが必要です。

これで本当に迷いました。これがばかげた質問であれば申し訳ありません。

勉強中だから無理しないで。

編集:
これは私のコードです。mktime() を使用しています。

$iniciodate = str_replace("/",",",$_POST['iniciopub']);
           $iniciopub = mktime(0,0,0,$iniciodate);
           
           $findate = str_replace("/",",",$_POST['finpub']);
           $finpub = mktime(0,0,0,$findate);

これにより、これが 10/27/2013 = 1382824800 のタイムスタンプに保存されますが、10/31/2013 についても同じです

また、私はこの形式を使用していますが、問題はありません

dateFormat: 'mm/dd/yy',

これは、datepicker jQuery UI で設定されるようになりました

4

2 に答える 2

4

返されたので、変数$iniciopubには値があります:1970-01-01strtotime()false

var_dump( strtotime($_POST['iniciopub']) );

サポートされている日付と時刻の形式をご覧ください。のような形式であると言っている場合、strtotime は、ここ00/00/0000に記載されているように、これがアメリカの月、日、年 ( ) であると想定します。$_POSTmm/dd/yyyy

入力された形式00/00/0000dd/mm/yyyy最も簡単な方法は、ヨーロッパの日付形式を使用するDateTime::createFromFormatか、作成することです。str_replace('/', '-', 'dd/mm/yyyy');dd-mm-yyyy

質問の更新

このコードは間違っています:

$iniciodate = str_replace("/",",",$_POST['iniciopub']);
$iniciopub = mktime(0,0,0,$iniciodate);

mktime()6 つのパラメーターがあります (7 番目はis_dst今は関係ありません)。$iniciodateあなたが考えるかもしれないように、4番目、5番目、6番目ではなく、 4番目のパラメーターのみを関数に入力しているため、そのように使用することはできませんmktime()

mktime(0,0,0,'10,27,2013');mktime(0,0,0,10,27,2013);はまたはと同じではありません`mktime(0,0,0,'10','27','2013');。日付10/27/201310/31/2013同じタイムスタンプを返す理由は、どちらの場合も、文字列10,27,201310,31,2013整数 (4 番目のパラメーター) にキャストすると、 が得られるため10です。見る:

$v = '10,27,2013'; var_dump( (int)$v ); # int(10)
$v = '10,31,2013'; var_dump( (int)$v ); # int(10)

そのため、次のように呼び出しても呼び出しは同じですmktime()

var_dump(  mktime(0,0,0,10) ); # int(1382832000)

error_reporting をオンにする ( error_reporting(-1);php ファイルの最初に置く) と、呼び出し後mktime(0,0,0,$iniciodate)に通知が表示されることがわかります。

注意: file.php の XX 行目に不適切な数値が見つかりました

10/27/2013とは標準的なアメリカの日付形式であるため、日付をタイムスタンプに変換する代わりに10/31/2013使用できます。strtotime()mktime()

var_dump( strtotime('10/27/2013') ); # int(1382832000)
var_dump( strtotime('10/31/2013') ); # int(1383177600)

あなたはコメントで尋ねました:if i store a date as dd-mm-yyyy. how can i compare the date with other date. am i doing fine storing as timestamp?

はい、タイムスタンプとして保存できます。しかし、コードでタイムスタンプを何年も使用していません。日付をYYYY-MM-DDとして保存しています。RDBMS では、これはちょっとしたベスト プラクティスです。

于 2013-10-27T07:33:57.500 に答える
0

PHP で mktime に変換しないより良い方法 - データを mktime として保存:

function mdf_init_calendars() {
jQuery(".mdf_calendar").datepicker(
        {
            showWeek: true,
            firstDay: 1,
            changeMonth: true,
            changeYear: true,
            showButtonPanel: true,
            onSelect: function(dateText, self) {
                var date = new Date(parseInt(self.currentYear, 10), parseInt(self.currentMonth, 10), parseInt(self.currentDay, 10), 23, 59, 59);
                var mktime = (date.getTime() / 1000);
                jQuery(this).prev('input[type=hidden]').val(mktime);
            }
        }
);
jQuery(".mdf_calendar").datepicker("option", "dateFormat", 'dd-mm-yy');
jQuery(".mdf_calendar").datepicker("option", "showAnim", 'fadeIn');
//+++
jQuery(".mdf_calendar").each(function() {
    var mktime=jQuery(this).prev('input[type=hidden]').val();
    var date = new Date(mktime*1000);
    jQuery(this).datepicker('setDate', new Date(date));
});

}

非表示の入力にデータを保存し、ページの読み込み時にそれらを読み込むため、PHP コードでは常に mktime を取得し、データ形式について考える必要はありません。必要に応じて js で設定できます (インラインの例) PHP:

日付ピッカーのhtml+phpコード

于 2014-06-10T11:13:48.147 に答える