php函数返回false

Jon*_*han 1 php

以下PHP函数返回一个月的第n个工作日,例如2012年1月的第3个星期三,形式为18-1-2012:

<?php
  function giveNthDay($month, $year, $no, $day) {
     $counter = 0;
     for($i=1;$i<=31;$i++) { //Schleife für 31 Tage
         if(!checkdate($month, $i, $year)) { //wenn datum nicht existiert (bspw. 30. februar) zu nächstem schleifendurchlauf springen
             continue;
         } else {
             if(date('l', strtotime($i.'-'.$month.'-'.$year))==$day) { //wenn generiertes Datum gleicher Wochentag wie gesuchter Tag $day
                 $counter++; //dann $counter um eins erhöhen
                 if($counter==$no) { //falls $counter==$no, also falls bspw. DRITTER ($no==$counter==3) Mittwoch gefunden, Datum zurückgeben
                     return     $i.'-'.$month.'-'.$year;
                 }
             }
         }
     }
     return false; //existiert nicht, bspw. fünfter Sonntag gibt es nicht in jedem Monat
  }
?>
Run Code Online (Sandbox Code Playgroud)

如果日期不存在(例如2012年1月的第5个星期五),则返回false.

这适用于以下示例:

giveNthDay(1, 2012, 3, "Wednesday");
giveNthDay(1, 2020, 3, "Wednesday");
giveNthDay(1, 2031, 3, "Wednesday");
Run Code Online (Sandbox Code Playgroud)

但来自

giveNthDay(1, 2038, 3, "Wednesday");
Run Code Online (Sandbox Code Playgroud)

即使每个1月份都有超过3个星期三,它也会返回false!

我努力找出这种奇怪行为的原因是什么,但我无法弄清楚.谁能帮我?

gre*_*eut 6

2038超出范围,最大日期为2037(在32位架构上).time()是一个unix时间戳(从1970-1-1 00:00:00开始).

  • DateTime类应该用于2038年之后的日期. (3认同)