我遇到了一点麻烦,似乎找不到任何可靠的答案。但我希望有人能帮助我。
我有一个HTML5输入表单,它可以获取选定的日期
<input type="date" name="launch_date" />
这将打开日期选择器,并以dd/mm/yy格式输入日期
我试着把它保存到一个SQL数据库中,在表中使用DATE类型,所以首先我为所有的表单输入创建变量
$launch_date = $_POST['launch_date'];
然后,我尝试将字符串转换为适当的时间戳,以便数据库可以接受它。
然后,所有变量都作为SQL INSERT/UPDATE查询的一部分添加到正确的列中。
$launch_date = strtotime($launch_date);
但是,每当我查看数据库时,它总是显示0000-00-00,就像它期望YYYY-MM-DD格式一样。
我怎样才能使在前端输入的日期是DD-MM-YYYY,但在数据库中正确地存储为YYYY-MM-DD?
更新
好吧,我想我是想让它变得太复杂了。通过使用HTML5日期输入,并将该输入直接保存到数据库中的DATA类型列中,将其保存为YYY-MM-DD。看起来工作得很好。
当我回显这些值时,它将输出例如2014-09-24。如何使它显示24-09-2014?
<?php echo $row['start_date'];?>
5条答案
按热度按时间jhdbpxl91#
您可以在JQuery日期选择器中进行修改。
此函数将显示MySQL日期-时间格式。
idfiyjo82#
我认为您的问题出在strtetime()上,让我们将该行替换为以下代码:
oxf4rvwz3#
注意,
stringToTime()
返回一个Unix时间戳(即从1970年1月1日00:00:00 UTC开始的秒数),这可能不是数据库所期望的。请记住,* presentational * 值可能因浏览器和用户的区域设置而异,但提交的 * actual * 值应为"A valid full-date as defined in [RFC 3339]"
下面是一个小演示:
http://runnable.com/VCLkST-wq9cPvwJT/stackoverflow-com-questions-26020544-for-php
根据问题的变化,您可以使用PHP's DateTime::format设置日期,如下所示:
tvmytwxo4#
根据我的经验,很多问题都归结为服务器上的区域设置。
PHP可能会将dd/mm/yyyy识别为mm/dd/yyyy,如果日期部分无效,则会出现fit。要使PHP正确验证日期为dd/mm/yyyy,请在以下情况下将/替换为-(dd-mm-yyyy)
这只是一个快速的检查,如果不是这样,那么我建议至少在过程中放入var_dumps,以检查日期的格式是否正确。
另一种方法是使用date_create_from_format(http://php.net/manual/en/datetime.createfromformat.php)解析日期以及要解析的格式。
我认为Windows PHP上没有实现......因此,如果您有麻烦,这里有一个函数实现
编辑:以防遗漏......确保在进入DB时将其转换为YYYY-MM-DD:
PHP喜欢时间戳...所以请使用它:
fcy6dtqo5#
使用SQL设置正确的格式:
把它拿回来