PHP/MySQL - 以 DD MMM YYYY 格式处理日期的最佳方式?

标签 php mysql date datetime

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

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

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

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

最佳答案

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

DATE 可以存储从 '1000-01-01' 到 '9999-12-31' ( source )

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');

关于PHP/MySQL - 以 DD MMM YYYY 格式处理日期的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19210874/

相关文章:

mysql 连接到远程数据库在 vagrant 上很慢

ios - 如何在 Swift Ios 中更新 FsCalendar 中的日期?

javascript - 为什么这些日期不同?

php - 如何始终将属性附加到 Laravel Eloquent 模型?

php - 将多个值排列到变量

php - 只想从 mysql 中的日期中获取月份部分

javascript - 从数据库获取数据时html中的多个选择选项

php - 无法使用 PHP 根据要求格式化日期

php - 为什么这个ajax脚本不使用ajaxRequest.open调用后端php?

php - 具有两个值的 html/php 多选