0


0

私は現在、新しいUIを作成しているサードパーティベンダーによって作成されたDBを持っています。

DBはイベントの開始時刻を(GMTの)unixタイムスタンプとして格納します。 私がする必要があるのは1日の範囲についてこれを問い合わせることです。 だからおそらく私は単にする必要があります:

SELECT * WHERE開始> $ last_night_at_midnightそして開始<$ tonight_at_midnight

私が遭遇している問題は、PHPの日付/時刻関数を組み合わせてそれらの変数を作成する簡単な方法です。 私がしていることはすべて、このような単純な手順には複雑すぎるようです。

誰かがこれに対する簡単な解決策を持っていますか?

乾杯

7 Answer


6


普通の英語からunixへの時間変換については、PHPの strtotime()を調べてください。

これにより、Paolo Bergantinoが示すように、 "今日の真夜中"や "明日の真夜中"やその他の同様の構成要素を使用できます。


5


http://www.php.net/strtotime[strtotime]  - 史上最高のPHP時間関数。
$ last_night_at_midnight = strtotime( "今日の真夜中"); $ tonight_at_midnight = strtotime( "明日の深夜");


4


これは非常に逆の方法ですが、今日や1日だけでなく、さまざまな日付範囲を設定する必要がある場合は、両方の言語の奇妙な日付/時刻機能を組み合わせて使用​​することができます。

$ php_start = strtotime( "有効な日付式"); $ php_end = strtotime( "その他の有効な日付式");

$ result = my_sql_query( "FROM_UNIXTIME($ php_start)とFROM_UNIXTIME($ php_end)の間のFROM_UNIXTIME(date_column)"から* some someDBを選択*););

クエリでDATE()を使用すると、SQLがデータの時間部分を探すのに邪魔にならないことが保証されます。また、3つすべてにFROM_UNIXTIMEを使用すると、SQLサーバーは日付の導出方法に一貫性があります。

今日だけの日付範囲を取得するための私のお気に入りの方法は、次のとおりです。

$ today_start = strtotime( "today"); $ today_end = strtotime( "1日"、$ today_start);

strtotimeがDSTをよりよく処理するので、strtotimeが実際にはより優れています。 先週それを見つけました。


3


http://php.net/strtotime[strtotime]はここでは便利なものです...
$ t1 = strtotime( "today"); $ t2 = strtotime( "明日");

$ sql = "select * from foo where timecol $ t1と$ t2の間";

執筆時点(09-03-2009 19:06)では、今日は09-03-2009 00:00:00に相当し、明日は10-03-2009 00:00:00に相当します。


1


任意の日を選ぶ必要がある場合は、 gmmktimeを使用してください。


0


PHPのtime()関数はここで役に立つかもしれません:http://be2.php.net/manual/en/function.time.php

より具体的には、そのページに示された例はおそらくあなたが知る必要があるものをあなたに教えてくれるでしょう。 3番目のechoステートメントを見てください。


-1


あなたはどちらかのPHPまたはMysqlでそれらの変数を作成することができます…​

$ tonight_at_midnight = mktime(0,0,0); $ last_night_at_midnight = $ tonight_at_mindnight  -  86400;

他の可能性はSQLにあります:

SELECT * FROM tbl1 WHERE開始> UNIX_TIMESTAMP(DATE_SUB(CURDATE()、1日間隔)AND <UNIX_TIMESTAMP(CURDATE())を開始します。

(未検証)