我有一个带有“生日”字段的文档,它的值也可以低于 01-01-1970。我该如何处理?例如
{....
'birthday' => newMongoDate(strtotime('31/10/1968')),
....
}
这将创建一个“生日”值:“1/1/1970 12:00:00 AM”(日期时间)
你运行的是什么版本的PHP?我猜在 Windows 上 PHP < 5.1?strtotime()
日期范围应为 1901 年 12 月 13 日星期五 20:45:54 GMT 和 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');
那是因为 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
我能想到的唯一选择是使用嵌套的 Date 对象,例如
birth_date : {
year : 1968,
month : 10,
day : 31
}
当然会有问题,但这是 Windows 用户的唯一选择。