我需要在MySQL表中存储只有一天零一个月的日期(它们定义了可以“附加”到一年后的抽象时期)。我发现使用DATETIME字段类型而不是例如整数更干净。因此,我决定将所有日期存储为相同的非常旧的年份。 MySQL DATETIME字段开始于1000年,所以我选择1004年(因为我可能不得不在这些字段中存储一个02-29的值,而1000不是not年)。
我将此值放在PHP DateTime对象中,并仅在页面上显示月份和日期部分。基本上,我正在这样做:
$date = DateTime::createFromFormat('Y-m-d H:i:s', $dateInDb);
echo $date->format('m-d');
这在我的开发服务器(Debian 7 / PHP 5.6 / Mysql 5.5)上以及在所有Linux,各种PHP 5.6+和MySQL / MariaDB版本的生产环境中都可以正常工作
我在Windows上只有一个生产环境(XAMPP中的PHP 5.6和MySQL 5.7)。在这种环境下,日期已正确存储在数据库中,但是当我在页面中显示月/日时,我总是得到01/01,就好像该值已以某种方式转换为默认时间戳一样。
用最近的东西(例如2000)代替1004年可以解决此问题。对于我来说,这是一个可以接受的解决方案,我并不在乎存储哪一年,因为我还是不使用它(我使用此技巧只是为了让以后的我清楚这一年是无用的)
我只是在寻找原因的原因,以满足我的好奇心,因为这可能会对将来真的需要旧日期的其他人有所帮助!这是一个已知的错误吗?