Q.単純に今日は?

A.

date('Y/n/j');

設定できる書式

ついでに現在のUnixタイムスタンプを知りたい時は time()

サンプル 今日と同じ日のデータは?

if (date('Y/n/j', strtotime($clus_day)) == date('Y/n/j')){

Q.昨日は?

A. strtotime(‘-1 day’);

使用例

date("Y/n/j時点", strtotime('-1 day'));

単に「前日の日付を表示させる場合」なら、問題ない。

 

しかし

if (strtotime($clus_day) == strtotime(‘-1 day’)) {

の比較は要注意で、不一致になる可能性があり、考えられる理由は「日付は同じだが、時刻が異なる」という判定になると思わます。

結局、「書式で日付だけに変更し、それを比較する処理」に変更した方がだと思います。

if (date('Y/n/j', strtotime($clus_day)) == date('Y/n/j', strtotime('-1 day'))){

 

サンプル 2日前と同じ年月なら

if (date('Y/m', strtotime($clus_day)) == date('Y/m', strtotime('-2 day'))){

 

 

Q. 例 2021-09-25T19:46:31+09:00 形式の日付を出したい

A.  date(‘c’)。ISO8601の日付というらしい(c について

なお使い方は

date_default_timezone_set(‘Asia/Tokyo’);

date(‘c’)

の順に記述しdate_default_timezone_set(‘Asia/Tokyo’);が必須です。

 

 

Q.文字列型の日付を日付型(タイムスタンプ)にしてから、希望の文字列に

A.パターンA 日にちを時間に変換して日付型(月と日)に変換する

$md = date('n/j', strtotime('2021/4/15'));

パターンB 指定した書式に変換して日付型(月と日)に変換する

$md = DateTime::createFromFormat('Y/m/d', '2021/4/15')->format('n/j');

パターンAもBも「4/15」を返すので、Aの方がラクかもしれません。

参考元・Thanks

 

 

Q.次の文で日付の判定で正しく動作していたのが、急に誤判定するようになった

if (date(‘Y/n/j’, strtotime($value2[0])) >= date(‘Y/n/j’, strtotime(‘-2 day’))){

A.たとえば

8/9 >= 8/7

8/10 >= 8/8

と人間はどちらも「正」と思っていても、PHPとしては

2021/8/9 >= 2021/8/7 〇

2021/8/10 >= 2021/8/8 X

となっていた模様です。そこでフォーマット(書式)を

if (date(‘Y/m/d’, strtotime($value2[0])) >= date(‘Y/m/d’, strtotime(‘-2 day’))){

に変えた結果

2021/08/10 >= 2021/08/08 〇

となりました。

変更箇所の’Y/n/j’と’Y/m/d’の違いは月や日が1桁の時

ゼロがつかない’Y/n/j’

ゼロがつく’Y/m/d’

で、現時点では日付の比較はゼロがつく’Y/m/d’で行うべきという判断です。

 

 

Q.入力した日付が存在するかどうかの日付チェックは?

A. checkdate関数(公式)で解決できます。サンプルはHTML出力しているので、<br>タグなどは無視して下さい

サンプル

if (checkdate($m, $d, $y) == FALSE){
    echo "{$y}年{$m}月{$d}日は存在しません<br>";
    echo "</body></html>";
    Exit;
}

 

PHPメニューへ戻る

 



ȥåץڡ