私はほとんどの時間をphpとmysqlまたはpgsqlで過ごしているので、日付APIの総称としてDateTimeを使用します。PHPには、「Date」、「Time」、「DateTime」、「DateTimeOffset」はありません。
Webアプリケーションを開発するにつれて、私はほとんどの場合DateTimeを使用しますが、それが本当に欲しいものなのかと思うこともあります。たとえば、今日の日付を表示したいだけの場合(たとえば、フォーラムやブログの投稿を保存したい場合)、計算も、提供するフィルターも、反復も発生しません...では、なぜ使用するのですか?機能\DateTime
を超えてdate()
?
各テクノロジーの長所を簡単に説明するこのトピックを見ました。
しかし、それは実際には質問に答えません。DATE_INTERVAL
API(phpではDateInterval
)とIntlDateFormatterを使用できるため、PHPのDateTimeオブジェクトにさらに2バイト、データベースに他の2バイトをスローするのは本当に損失ですか?
さらに、この投稿では、unix_timestampは1970年から予約されていると述べています。しかし、それは論理的ではなく、いくつかのテストでそれが証明されています。
echo date('d/m/Y',time(-1));
'31/12/1969'をエコーします!そしてそれは論理的です。32ビットのunsignedintは0から4 294 967 295
68年で約20億秒しかないため、intは符号付きであり、「負のタイムスタンプ」が存在する必要があります。
もう1つ、これは私にとって非常に重要であり、毎回DateTimeを選択する理由は、整数ではなく日付を処理したいということです。DateTimeは日付ですが、タイムスタンプはそうではありません!私がタイムスタンプを見つけた唯一の意味は、ファイル名にタイムマークを付けたい時間でした。なぜなら、そのcasのタイムスタンプはタイムスタンプであるからです...
ただし、それでも問題があります。タイムゾーンの処理です。MySQLなどは日付をDateTimeとして保存するときにタイムゾーンを処理しないため、今のところ、「フィルターインエスケープアウト」のエスケープ部分としてTimeZone統合を使用します
$toStoreDate = new \DateTime($_POST['date'],new DateTimeZone('UTC'));
$dao->exec('INSERT INTO mytable(mydate) VALUES (\''.$toStoreDate->format('Y-m-d h:i:s').'\')');
$toDisplayDate =new \DateTime( $dao->query('SELECT mydate FROM mytable')
->fetch(DAO::FETCH_ASSOC)['mydate']);
$toDisplayDate->setTimeZone(new DateTimeZone('myLocal'));
それは正しい方法ですか?単純なタイムスタンプを保存してから、適切な現地時間を取得する方がよいのではないでしょうか。
だから、ここに質問の要約があります:
- APIの本当に単純な使用(表示のみ)では、DateTimeのあと2バイトが失われますか?
- unix_timestampをあきらめる時ですか?
- 単純なタイムスタンプを保存してから、適切な現地時間を取得する方がよいのではないでしょうか。