明らかに単純な問題について助けが必要ですが、それがどのように適切に機能するのかわかりません
01/02/2012 07:40:23 などの日付を MySQL に保存しています
この日付は $list['timeadded'] 変数で php に抽出されます。
現在の日付とその日付の差が 7 日以内かどうかを確認する必要がある場合は、差を日数で表示します。それ以外の場合はエコー クローズします。
誰かがこれを理解するのを手伝ってくれますか?
ありがとう
私は今、PHP ソリューションを探していますが、効率的な方法で直接 SQL でこの仕事を行うことができ、PHP でのチェックを避けることができます。デモ URL を見て、出力を確認します。
http://sqlfiddle.com/#!2/ca91e/26
テーブル:
create table t (id int(3), date varchar(40));
insert into t values (1, '25/03/2013 07:40:23'),
(2, '26/03/2013 07:40:23'),
(3, '20/03/2013 07:40:23');
SQL:
SELECT id, date_format(curdate(), '%Y-%m-%d %h:%i:%s') AS CurrDate,
date_format(STR_TO_DATE(date, '%d/%m/%Y %h:%i:%s'), '%Y-%m-%d %h:%i:%s') AS MyDate,
if(datediff(date_format(curdate(), '%Y-%m-%d %h:%i:%s'), date_format(STR_TO_DATE(date, '%d/%m/%Y %h:%i:%s'), '%Y-%m-%d %h:%i:%s'))<=7,
datediff(date_format(curdate(), '%Y-%m-%d %h:%i:%s'), date_format(STR_TO_DATE(date, '%d/%m/%Y %h:%i:%s'), '%Y-%m-%d %h:%i:%s')), 'closed') AS Text
FROM t;
出力:
ID CURRDATE MYDATE TEXT
1 2013-03-29 12:00:00 2013-03-25 07:40:23 4
2 2013-03-29 12:00:00 2013-03-26 07:40:23 3
3 2013-03-29 12:00:00 2013-03-20 07:40:23 closed
あなたのクエリでは、そのフィールドで UNIX_TIMESTAMP() を使用します。そう:
SELECT
UNIX_TIMESTAMP(timeadded) AS timeadded
FROM `your_table`
次に、この結果を使用して、現在の日付からそれを減算します。そう:
$difference = (time()-$list['timeadded']);
私は今、時差を秒単位で持っています。を使用して、これを日、分、または時間としてフォーマットできますdate()
。
ここで説明されている datediff 関数を使用できます: http://www.php.net/manual/en/datetime.diff.phpまたは、独自の関数を記述して、2 つの日付を UNIX タイムスタンプに変換して差を計算することができます。次に、2 つの間の秒数を計算してから、日数を計算します。
function numberOfDays($datecol) {
$dateSeconds = strtotime($datecol);
$now = time();
$seconds = $now - $dateSeconds;
//calcualte the number of days
$days = $seconds / (60 * 60 * 24);
return $days
}
私はこれがあなたが必要とすることをするかもしれないと思います(これをあなたのクエリに投げてください)
WHERE CURDATE() >= STR_TO_DATE( datecol
, "%c/%d/%Y %H:%i:%s") - INTERVAL 7 DAY
PHP バージョン
$list['timeadded'] = '01/02/2012 07:40:23';
$dt1 = new DateTime($list['timeadded']);
$dt2 = new DateTime();
$dt2->sub(new DateInterval('P7D'));
$interval = $dt1->diff($dt2);
echo $interval->format('%d days');
使用日数を取得できます$interval->d