2038年1月19日后的日期和strtotime

时间:2014-08-14 09:38:33

标签: php

这是我的代码: -

        foreach ($this->data['age'] as $row) {
            $nepali_date = strtotime($row['mem_birth_date']);
            $english_date = strtotime("-56 years -8 months -16 days", $nepali_date);
            $date = date("Y/m/d", $english_date);
            $now = date($now);              

            $age = ($now - $date);
            if ($age >= "18" && $age <= "24") {
                $i++;
            }
            if ($age >= "25" && $age <= "29") {
                $j++;
            }
            if ($age >= "30" && $age <= "39") {
                $k++;
            }
            if ($age >= "40" && $age <= "49") {
                $l++;
            }
            if ($age >= "50" && $age <= "59") {
                $m++;
            }
            var_dump($row['mem_birth_date']);
            var_dump($nepali_date);
            var_dump($now);
            var_dump($date);
            var_dump($age);
        }

当$ row [&#39; mem_birth_date&#39;]大于2037年$ nepali_date结果为boolean false。你能告诉我问题和解决办法吗?

1 个答案:

答案 0 :(得分:3)

我不认为有任何上限是为函数中字符串的长度定义的。如果字符串格式不正确,那么strotime将返回false。

来自manual: -

  

注意:

     

时间戳的有效范围通常来自1901年12月13日星期五   20:45:54 UTC to Tue,20 Jan Jan 03:14:07 UTC。(这些是日期   对应于32位带符号的最小值和最大值   整数。)此外,并非所有平台都支持负时间戳,   因此,您的日期范围可能不会早于Unix   时代。这意味着,例如1970年1月1日之前的日期将无效   在Windows上,一些Linux发行版,以及其他一些操作系统   系统。 PHP 5.1.0和更新的版本克服了这个限制。

     

对于64位版本的PHP,时间戳的有效范围是   有效无限,因为64位可以代表大约293   两年十亿年。

您还可以参考其他一些解决方案:

或者你可以试着像这样使用Datetime:

$date = new DateTime('@'.$obj->date);
echo $date->format('Y-m-d H:i: sP') ."";