MongoDbはISODateとして残る。
javascriptのnew ISODate()で登録すると GMTで登録される。
#参考にGMTとUSTはグリニッジ標準時をご覧ください。
これをphpのstrtotime()とかで日付を取得して検索すると
GMTとJSTの+9時間の時差が出る。
参考にphp.iniに「date.timezone = Asia/Tokyo」があった。
例)
(1) new ISODate(2013-01-02 01:00:00) で登録
GMTで登録される。すなわち JST 2013-01-01 16:00:00である。
(2) 以下のようにphpで検索条件を作る。
$start_date = new MongoDate(strtotime('2013-01-02 00:00:00'));
array("_id" => array ('$gte'=>$start_date));
print( date('T Y-m-d H:i:s',$start_date->sec) ) ; -> JST 2013-01-02 00:00:00'と表示される。
上記(1)をmongoで見るとISODate("2013-01-01T01:00:00Z")のように見えるから
注意しないと間違ってしまう。
登録するときは+09:00した時間で登録するか
あるいは検索条件に−09:00にしないと。。
参考になるサイトをreferenceに貼っておく。
しばらくはphpでnew MongoDate()する際に以下の様にしてる。
MapReduceでISODateで登録された日付を取得して再度登録したら9時間前の時間で登録された。
既に登録済の値:2013/01/02 00:00:00
再度登録した結果:2013/01/01 15:00:00
取得した時にJSTになり再度登録したらGMTとなってしまった。
ややこしいからISODate型を使わない方がいいかも
代わりに容量は損するが。
javascriptのnew ISODate()で登録すると GMTで登録される。
#参考にGMTとUSTはグリニッジ標準時をご覧ください。
これをphpのstrtotime()とかで日付を取得して検索すると
GMTとJSTの+9時間の時差が出る。
参考にphp.iniに「date.timezone = Asia/Tokyo」があった。
例)
(1) new ISODate(2013-01-02 01:00:00) で登録
GMTで登録される。すなわち JST 2013-01-01 16:00:00である。
(2) 以下のようにphpで検索条件を作る。
$start_date = new MongoDate(strtotime('2013-01-02 00:00:00'));
array("_id" => array ('$gte'=>$start_date));
print( date('T Y-m-d H:i:s',$start_date->sec) ) ; -> JST 2013-01-02 00:00:00'と表示される。
上記(1)をmongoで見るとISODate("2013-01-01T01:00:00Z")のように見えるから
注意しないと間違ってしまう。
登録するときは+09:00した時間で登録するか
あるいは検索条件に−09:00にしないと。。
参考になるサイトをreferenceに貼っておく。
しばらくはphpでnew MongoDate()する際に以下の様にしてる。
$GMT_TimeZone = new DateTimeZone('GMT');
$start_date_Ymd = new MongoDate(
DateTime::createFromFormat('Y-m-d H:i:s',
date("Y-m-d 00:00:00", strtotime("-31 days")), $GMT_TimeZone)->getTimestamp() );
MapReduceでISODateで登録された日付を取得して再度登録したら9時間前の時間で登録された。
既に登録済の値:2013/01/02 00:00:00
再度登録した結果:2013/01/01 15:00:00
取得した時にJSTになり再度登録したらGMTとなってしまった。
ややこしいからISODate型を使わない方がいいかも
代わりに容量は損するが。
0 件のコメント:
コメントを投稿