下記のようにdate()
を利用して特定に日付を返すget_ye()
関数を定義しているのですが、$test_2の引数を渡すと"Y"に関して、1970年のタイムスタンプの基準点を返してきます。
(環境)PHP:7.4.1
php
1<?php 2 function get_ye($dat){ 3 $mm = date('m', strtotime($dat)); 4 if ($mm==="01"||$mm==="02"||$mm==="03"||$mm==="04"||$mm==="05") { 5 $target = date('Y', strtotime($dat))."-05-31"; 6 }elseif ($mm==="06"||$mm==="07"||$mm==="08"||$mm==="09"||$mm==="10"||$mm==="11") { 7 $target = date('Y', strtotime($dat))."-11-30"; 8 }elseif ($mm==="12"){ 9 $target = (date('Y', strtotime($dat))+1)."-05-31"; 10 } 11 return $target; 12} 13?> 14 15<?php 16$test_1 = "2031-02-31"; 17$test_2 = "2050-04-15"; 18 19get_ye($test_1)// "2031-05-31" //正しい 20get_ye($test_2)// "1970-05-31" //正しくない 21?>
$test_1と同じ条件でやっているのに、不思議に思い他の環境で試し直接以下のコードを実行してみたところ、やはり適切な日付である"2050-05-31"
を返してくれませんでした。
php
1 $mm = date('m', strtotime("2050-04-15")); 2 if ($mm==="01"||$mm==="02"||$mm==="03"||$mm==="04"||$mm==="05") { 3 $target = date('Y', strtotime("2050-04-15"))."-05-31"; 4 }elseif ($mm==="06"||$mm==="07"||$mm==="08"||$mm==="09"||$mm==="10"||$mm==="11") { 5 $target = date('Y', strtotime("2050-04-15"))."-11-30"; 6 }elseif ($mm==="12"){ 7 $target = (date('Y', strtotime("2050-04-15"))+1)."-05-31"; 8 } 9 echo $target; // "1970-05-31" //正しくない
他方で、オンラインphp環境のpaiza.ioでこれを実行すると期待する"2050-05-31"
を返してくれます。
この問題を切り分けることができないのですが、php.ini等の設定の問題なのでしょうか?原因が特定できず、ご質問をさせて頂きました。
宜しくお願い申し上げます。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/02 15:12