我有一个带有“生日”字段的文档,其值也可以低于01-01-1970。我怎么处理这个? E.g。
{....
'birthday' => newMongoDate(strtotime('31/10/1968')),
....
}
这会创建一个“生日”值:“1/1/1970 12:00:00 AM”(日期时间)
答案 0 :(得分:3)
您运行的是哪个版本的PHP?我猜PHP< 5.1在Windows上? strtotime()
的日期范围应为格林威治标准时间1901年12月13日20:45:54 GMT和Tue,2038年1月19日03:14:07 GMT,PHP 5.1及更高版本。
对于PHP 5.2及更高版本,您可以使用:
$date = new DateTime('1 Jan 1950');
echo $date->format('Y-m-d');
,或者
$date = DateTime::createFromFormat('d M Y','1 Jan 1950');
echo $date->format('Y-m-d');
答案 1 :(得分:0)
这是因为UNIX时间戳从1970年(http://php.net/manual/en/function.strtotime.php)开始,这是strototime
计算的地方。尽管strtotime
可以从1901年开始,但请注意:
时间戳的有效范围通常是从星期五,1901年12月13日20:45:54 UTC到星期二,2038年1月19日03:14:07 UTC。 (这些是与32位有符号整数的最小值和最大值相对应的日期。)此外,并非所有平台都支持负时间戳,因此您的日期范围可能不会早于Unix时期。这意味着,例如1970年1月1日之前的日期不适用于Windows,某些Linux发行版和一些其他操作系统。 PHP 5.1.0和更新的版本克服了这个限制。
因此,您很可能遇到系统根本不支持纪元之前的日期的问题。
您可以像@nick所说的那样使用DateTime()
来代替,更具体地说是使用timestamp
函数:http://www.php.net/manual/en/datetime.gettimestamp.php
答案 2 :(得分:-1)
我能想到的唯一选择是使用类似
的嵌套Date对象birth_date : {
year : 1968,
month : 10,
day : 31
}
当然会出现问题,但这是Windows用户的唯一选择。