1

2012-03-19 05:00:32 として文字列で返される日付があり、データベースからのものではありません

以下を使用して、過去 30 日間を検索できます

$date = '2012-03-19 05:00:32';
if (strtotime($date) >= strtotime('-7 days')) {
// do something
}

問題は、今日が 3 月 19 日の場合、過去 7 日間の 11 日から 18 日までを検索することでしたが、24 時間を計算して過去 7 日間を検索しているようです * 7 私の検索では、00:00 から開始する必要があります。 :01 毎日。

私の計画は、日付を年、月、日に分解し、年 = 12 かどうかを確認し、月 = 3 かどうかを確認し、次に日付が 11 から 18 の間かどうかを確認することです。

これを行うためのより効率的な方法があるかどうか、または正しい軌道に乗っているかどうか疑問に思っています。

また、今月のすべての情報を検索すると同じ問題が発生し、今週月曜日からすべての情報を検索したいと考えています。

つまり、これは私の方法が正しいかどうか、またはより効率的な方法があるかどうかを尋ねているだけです。

4

2 に答える 2

0
$mytime = new DateTime('2012-03-19 05:00:32');
$mydate = new DateTime($mytime->format('Y-m-d')); //keep date only, exclude the time component
$now=new DateTime; //includes hours, minutes, seconds
$today=new DateTime($now->format('Y-m-d')); //time set to 0:00

$interval = $mydate->diff($today);
if($interval->format('d') <=7) { //assuming that $mydate isn't in the past
 //do something
}
于 2012-09-14T12:33:51.457 に答える
0

DateTimeクラスを使用することをお勧めします...

<?php
$d1=new DateTime("2012-07-08 11:14:15.638276");
$d2=new DateTime("2012-07-08 11:14:15.889342");
$diff=$d2->diff($d1);
print_r( $diff ) ;

/* returns:

DateInterval Object
(
    [y] => 0
    [m] => 0
    [d] => 0
    [h] => 0
    [i] => 0
    [s] => 0
    [invert] => 0
    [days] => 0
)

*/
?>
于 2012-09-14T12:25:31.190 に答える