2012-03-29 5 views
0

私は、6つのhtmlドロップダウンが現れ、レポートのデータを見たい2つの日付を入力するようにphpでレポートを作成しています。以下のように、たとえばレポートが行く:PHPの日付についての論理

参照データを間:[月] [日]、[年]。また、[月]、[日]、[年](括弧はselectタグを意味する)

このレポートには、前日からの増減率を計算する関数があります。だから、ユーザーが任意の日付範囲を選択しない場合、たとえば、それは単に現在の日のデータだと割合は以下のように計算されます。私はそれを伝えることができるので、これは1日だけの計算に明らかに非常に簡単です

round(((($newDataPointCount - $yesterdayDataPointCount)/$yesterdayDataPointCount) * 100),2) 

INTERVAL 1 DAYでSQLデータベースを照会する。しかし、ここに私の質問ですが、月が変わると、日間隔の数はどのように計算されますか?

ユーザーが1ヶ月以内に滞在すれば、3月[20] [2012] - [3月] [29] [2012]のようになりますが、 [2月] [27] [2012] - [3月] [20] [2012]のようなものであれば、その間の日数はどのように計算できますか?

私はPHPとMySQLを使用しており、その範囲内にとどまることを望んでいます。

答えて

1

のMySQL DATEDIFF関数は

DATEDIFF

+0

私はphpのdate-> diff関数をチェックアウトしました。ヒントをありがとう! – bswinnerton

1

日付がスカラーではなく、そのようなものとして扱われるべきではないタスクを実行すべきです。私のアドバイスは、ユーザーに日付演算のための適切なツールです。

$a = '2012-02-12 14:03:50'; 
$b = '2012-05-30 00:55:03'; 
$days = (strtotime($b) - strtotime($a))/86400; 

しかし、夏時間と要因の種類のすべてが間違った数学の種類を行うことができます。

多くの人々は、Unixタイムスタンプ指向の日付の数学を示唆しています。

$a = new DateTime('2012-02-12 14:03:50'); 
$b = new DateTime('2012-05-30 00:55:03'); 
$diff = $b->diff($a); 
//$diff is now a DateInterval 

しかし、あなたの本当の質問に答えるために、私はMySQLの日付の計算に基づいてのMySQLからデータを引っ張らないだろうが、むしろ私はちょうどそれ日付与えるだろう:

私のアプローチは、通常のDateTimeを使用することです。

WHERE d >= '2012-02-27' AND d <= '2012-03-29'; 

要件に基づいて、前の日を取得するために27から26に変更する必要がある場合があります。

ポイント値の変更は、あらかじめ計算して保存するか、PHPで計算するだけです。 SQLに「これらの日付の間にすべてのレコードを取得し、その間に各レコードの前のレコードで数式を実行する」という簡単な方法はありません。

私はこれがはっきりしていることを望みますが、明快さ以外には気がついています。もしそうなら、教えてください。

関連する問題