我需要在mysql表中存储只有一天和一个月的日期(它们定义了可以“附加”到一年后的抽象周期)。我发现使用datetime字段类型比使用整数更简洁。所以我决定把所有的日期都储存在同一个非常古老的年份。mysql datetime字段从1000年开始,所以我选择了1004年(因为我可能需要在这些字段中存储一个02-29的值,而1000不是闰年)。
我把这个值放在一个php datetime对象中,只在页面上显示月份和日期部分。基本上,我是这样做的:
$date = DateTime::createFromFormat('Y-m-d H:i:s', $dateInDb);
echo $date->format('m-d');
这在我的开发服务器(debian 7/php5.6/mysql 5.5)上运行良好,在linux上的几个生产环境中运行良好,有各种php5.6+和mysql/mariadb版本)
我在windows上只有一个生产环境(xampp中的php5.6和mysql 5.7)。在这个环境中,日期被正确地存储在数据库中,但是当我在页面中显示月/日时,我总是得到01/01,就好像这个值以某种方式被转换成默认的时间戳一样。
把1004年换成更近的年份,比如2000年,可以解决这个问题。对我来说,这是一个可以接受的解决方案,我并不关心存储的年份,因为我无论如何都不会使用它(我使用这个技巧只是为了让未来的我明白年份是无用的)
我只是想找一个原因的解释,以满足我的好奇心,因为它可能有助于其他人在未来谁真的需要旧的日期!这是已知的错误吗?
暂无答案!
目前还没有任何答案,快来回答吧!