1

我需要在我正在处理的网站上以DD MMM YYYY格式显示日期。我的第一个想法是将日期存储在 MySQL 中的 DATE 类型中,然后使用 PHP 转换为正确的格式。但是,这只是返回01 Jan 1970 - 而不是04 May 1891的实际日期。

我发现其他一些地方人们也问过类似的问题,而答案总是类似于SELECT date_format(dt, '%d/%m/%Y')给我的 04/05/1891。我希望月份为 3 个字符(May、Jun、Jul、Aug 等)。

我曾考虑将日期存储为 VARCHAR,但这似乎是一种不好的做法。看起来我必须将日期存储为字符串,并且无法使用 PHP date() 函数,因为它无法处理 1970 年之前的日期。

我可能想做一些事情,比如计算年龄,这在处理字符串时听起来很痛苦......我想知道是否有人有更优雅的解决方案?

4

2 回答 2

4

您可以使用DATE将日期保存在您的数据库中。

DATE 可以存储从 1000-01-01 ”到“9999-12-31”的值(来源

PHP 的旧日期函数(即 date()、strtotime())是 32 位的,因此仅适用于 UNIX 时间戳(它们仅限于 1970-2038 范围)。

使用 PHP 5 的新类DateTime您可以执行以下操作:

$date = new DateTime("1780-06-01");
echo $date->format('Y-m-d H:i:s');

编辑:要计算两个日期之间的差异(如您的问题中所述),一种简单的方法是:

$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%Y years');
于 2013-10-06T16:16:11.473 回答
0

我总是使用常量文件....

define('OUTDATE','%d %b %Y');
define('INDATE', '%Y-%m-%d');

然后(如注释中所述),使用常量操作字符串。

$sql = "SELECT DATE_FORMAT(birthday, ".OUTDATE.") FROM table1";
于 2013-10-06T16:15:14.563 回答