发布日期:30/11/-0001


Date Issue: 30/11/-0001

我的网页上有一个java脚本日历控件,用于管理日期,有时日期值会存储在我的数据库中,作为"30/11/-0001"。

如果有人帮助我,我将不胜感激。。。。。

您尝试设置的日期可能为空。我对Symfony2项目也有同样的问题,其中DateTime存储在SQL中,值为"0000-00-00 00:00:00",当Twig的日期过滤器解析时,结果为"30-11-0001"。

两天后,我在php.net上使用注释得到了解决方案:

注意:如果年份以两位数格式指定,00-69之间的值映射到2000-2069,70-99映射到1970-1999。有关32位的可能差异,请参阅以下注释系统(可能的日期可能在2038-01-19 03:14:07结束)。


注意:时间戳的有效范围通常为12月13日星期五1901年20:45:54 UTC至2038年1月19日星期二03:14:07 UTC。(这些是与32位的最小值和最大值相对应的日期带符号整数。)在PHP 5.1.0之前,并非所有平台都支持负时间戳,因此您的日期范围可能被限制为"否"早于Unix时代。这意味着,例如1月之前的日期1970年1月将无法在Windows、一些Linux发行版和一些其他操作系统。对于64位版本的PHP,有效范围时间戳的长度实际上是无限的,64位可以表示在任何一个方向上大约2930亿年。

由于这个问题,他们显示01-01-197030-11-0001

因此,您可能需要将Validation放在输入的位置。

从我的角度来看:我正在考虑Android方面的价值,所以我为此创建了正则表达式

您可以在此处测试Regex

希望它能帮助你。

您需要在前端进行一些测试,获得使用不同输入构建的SQL语句,并查看插入数据库的内容。SQL查询中格式错误的日期可能是您看到的数据库值的罪魁祸首。

if (!empty($this->dob && $this->dob != '0000-00-00')) 
{
        $dob = date_format(date_create($this->dob), "d-m-Y");
} else {
        $dob = '';
}

添加此条件以解决此日期问题$this->dob != '0000-00-00'

这可能是两件事的结合:

  1. SQL服务器MariaDB和MySQL将未知日期存储为"0000-00-00 00:00:00"
  2. 'DateTime::createFromFormat("Y-m-d H:i:s", "0000-00-00 00:00:00")会创建您在问题中提到的日期值

参见此处

因此,在SQL世界中,DateTime和Date有三种类型的值。

  1. 有效日期
  2. NULL(表设计中允许空)
  3. 0000-00-00 00:00:00

在PHP中,您有null或有效日期。因此,与数据库的通信必须决定如何处理案例2和案例3。您可能希望在PHP中将0000-00-00...更改为null,但在写回时会导致null值,这在数据库设计中可能是不允许的。

长话短说:确保PHP中的查询与您的决定相匹配。为PHP&lt->日期的SQL范例切换。据我所知,只有日期如此复杂。

(顺便说一句,JavaScript与此无关)