プロが教える店舗&オフィスのセキュリティ対策術

PHPで日付の計算をする場合、
一旦秒に直すしかないのでしょうか?
たとえば、ある日から、明日までだったら・・・
の計算場合、該当する「ある日」を秒に変換し、
それにプラス86400(一日)秒足して条件設定するという
方法しかないのでしょうか?

A 回答 (4件)

「それしか無いのか?」と聞かれたら、「そんなことは無い」ですが


タイムスタンプでやった方が簡単ですよ

例えば、2/28から3/1の場合はどう考えます?
人間は見た目で3/1の方が後ってわかりますけど
コンピュータには判断できないですよね

概念を全て比較条件に入れると大変面倒になります
まず日付で比較、次に月をまたいだ処理、さらに年をまたいだ処理
ここまでしないと正確に現在過去未来の関係性は出せません
単位が一意なタイムスタンプでの計算の方が簡単な比較で済むんです

strtotimeっていう関数はご存知ですか?
もし知らなかったら、コレの方が使いやすいかもしれないので
一度調べてみてはいかがでしょう
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/04/15 16:49

koke29さんに反論するようで、申し訳ありませんが・・・



PHP5.1以前では、秒で計算するしかありません。
timestampは1970年1月1日0時0分0秒(UTC)からの経過秒数そのものです。
本当に意味での、時刻や、時間間隔型をもっている言語は、まだそう多くはありません。
JavaScriptは、Date型という立派な型があるように見えますが、計算はミリ秒で行います。

PEARやPHP5.2以上でしたら、DateTimeクラスがいいかもしれません。

参考URL:http://fdays.blogspot.com/2007/05/phpdatetime.html
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
PHP5.2以上であれば、Date型っぽい変数を扱うことができるのですね。

お礼日時:2009/04/15 16:50

>masa6272様


反論ありがとうございます笑
参考URLも見させて頂いて、私も勉強させて頂きました

で、反論頂いた内容についての補足なのですが
私が例に挙げたのは、あくまで算数の計算でした
$y1 = 2008;
$m1 = 2;
$d1 = 28;
$y2 = 2008;
$m2 = 3;
$d2 = 1;
として考えた時には 全項目の比較をしないと
厳密に日付の比較にはならないですよっていう意味だったんです

※コードも書いてみようと思ったのですが、ややこしいので
やめましたが、条件さえちゃんと設定すれば ものすごい手間ですが
正しい答えは一応出ますよね?

手間さえ惜しまないならタイムスタンプ以外にも方法はあるけど
そんなことやってらんないだろうからタイムスタンプでやった方が
いいよっていうのが前回のレスの真意でした

私も日付や時間の計算って苦手で、色々やった挙句に
タイムスタンプでの計算が一番スマートなんだなって
実体験として理解したので、↑みたいな考え方がそもそも
間違いということであれば、改めてご指摘頂けると嬉しいです
(人の板でスミマセン…)
    • good
    • 0
この回答へのお礼

補足ありがとうございます。

お礼日時:2009/04/15 16:52

了解です。


PHP以外の言語でも、時刻型がない場合には、秒数計算が一番手っ取り早いでしょうね。
多くのシステムでは、RDBMSを使っていますので、RDBMSを使っている場合には、時間に関する部分は、なるべくSQLに任せてます。
PostgreSQLやOracleですと、時間間隔型もありますので、非常に楽です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
SQLの場合、日付型があるので日付を取得してからphpで計算するより
SQLで日付の計算をしておいてから日付を取得したほうが楽ですね。

お礼日時:2009/04/15 16:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!