我正在使用PHP开发Web应用程序.我有一个正在通过客户端验证的日期表单,然后使用准备好的语句通过POST提交以插入到数据库中.
除了客户端验证之外,我还想对日期进行服务器端验证,但是我很难理解strtotime和DateTime类的行为.
什么规则允许这两种方法将字符串a转换为今天的日期和strtotime并将asdf转换为1969-12-31?使用date_parse我看到a被识别为有效的时区(以某种方式),但是没有与之关联的时间. asdf更加令人困惑,因为date_parse实际上说找不到时区…但是它仍然出现在1969-12-31
我打算将字符串转换为日期,然后进行测试以确保日期在有效范围内,但是a和asdf都可以通过此测试.我知道我可以使用DateTime :: createFromFormat并指定客户端代码应发送的格式,但我真的很好奇为什么这些功能会像它们那样工作?
解决方法:
strtotime返回为-1
strtotime函数-函数成功返回一个时间戳,否则返回FALSE.
在PHP 5.1.0之前,此函数在失败时将返回-1.
日期函数-该函数包含两个参数格式和时间戳.现在,根据时间戳整数字段,将创建日期.
因此,创建一个时间戳记为0的日期将得到1970-01-01,为-1则得到1969-12-31,依此类推.
程式码范例
echo Date('Y-m-d', 0); // OUTPUT - 1970-01-01
echo Date('Y-m-d', -1); // OUTPUT - 1969-12-31
echo Date('Y-m-d', false); // OUTPUT - 1970-01-01
echo Date('Y-m-d', strtotime('a')); // OUTPUT - 2018-01-16
echo Date('Y-m-d', strtotime('asdf')); // OUTPUT - 1970-01-01
当前场景
现在,在您的情况下,似乎strtotime函数失败,因此返回-1作为时间戳.因此日期.
有关strtotime函数的更多信息,请参考PHP docs