1

mysql データベースに 2 つの日付が保存されています (タイプ = 日付)。例えば ​​-

日付 1 = 2010年 9 月 20 日
日付 2 = 2010 年 10 月 20 日

この 2 つの日付の間の日数を計算したいと思います。だからこれを試した -

$number_days = (strtotime($date2) - strtotime($date1) / (60 * 60 * 24));

しかし、これは49を返します

どうして?

- - - - - - - - - - - - - - - - - - - アップデート - - - - - - ------------------------------

わかりました、混乱を引き起こしている問題に気づきました。別の関数を使用して日付 1 を取得していましたが、さまざまな理由でこの日付が正しく返されなかったため、指定された日数は実際には正しいものでした。データベースから正しい日付を取得したとき、/ 以上の優先順位を考慮して、上記の計算が機能しました -

ご回答ありがとうございます。

4

3 に答える 3

19

/よりprecedence高い-

として扱わ (a - b / c)( a - (b/c) )ますが、必要なのは( (a - b) / c )

だから試してください:

$number_days = (strtotime($date2) - strtotime($date1))  / (60 * 60 * 24);
于 2010-09-20T10:32:39.143 に答える
2

MySQL データベースから両方の日付をフェッチする場合、SQL クエリ中に UnixDateTime 整数形式に変換する方が簡単であることがわかっています。それらは、その形式で処理する方がはるかに簡単です。

クエリは次のようになります。

SELECT *, UNIX_TIMESTAMP(date1) date1_u, UNIX_TIMESTAMP(date2) as date2_u from mytable

日付を文字列として取得し、PHP の扱いにくい日付処理関数をいじるよりも、そうする方がはるかに優れていると私は常々思っています。

そうは言っても、日付クラスはPHP5.3の方がはるかに優れています-日付の加算/減算関数もあり、strtotime()よりもはるかに優れた問題を解決します... PHP 5.3を使用していると仮定します。

それが役立つことを願っています。ただし、それが質問に直接答えないことは知っています!

于 2010-09-20T10:39:31.563 に答える
2

これはMySqlクエリで行うことができます

SELECT (TO_DAYS( date1 ) - TO_DAYS( date2 )) as difference FROM MyTable

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_to-days

于 2010-09-20T10:34:19.107 に答える