3

我有一个带有“生日”字段的文档,它的值也可以低于 01-01-1970。我该如何处理?例如

{....
    'birthday' => newMongoDate(strtotime('31/10/1968')),
 ....
}

这将创建一个“生日”值:“1/1/1970 12:00:00 AM”(日期时间)

4

3 回答 3

3

你运行的是什么版本的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');
于 2013-05-29T09:05:21.887 回答
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

于 2013-05-29T09:40:12.113 回答
-1

我能想到的唯一选择是使用嵌套的 Date 对象,例如

birth_date : {
  year : 1968,
  month : 10,
  day : 31
}

当然会有问题,但这是 Windows 用户的唯一选择。

于 2013-05-29T09:07:22.880 回答