在 SQL 中使用 PHP 为 DATETIME 转换日期
Posted
技术标签:
【中文标题】在 SQL 中使用 PHP 为 DATETIME 转换日期【英文标题】:Converting dates with PHP for DATETIME in SQL 【发布时间】:2012-05-28 03:15:42 【问题描述】:我有一个 php 论坛,它的日期类似于表单
dd/mm/yyyy hh:mm:ss
。但是,我需要将它作为 DATETIME 以yyyy-mm-dd hh:mm:ss
的格式插入到 SQL 中。如何转换这些数据?
【问题讨论】:
这已经被问了一百万次了。快速搜索即可找到您的答案。 【参考方案1】:您的日期时间格式错误:dd/mm/yyyy hh:mm:ss
。可能你的意思是d/m/Y H:i:s
如果您有 5.3+ 版本,则可以安全地将日期时间转换为另一种格式。这是一个例子:
$timestamp = '31/05/2001 12:22:56';
$timestamp = DateTime::createFromFormat('d/m/Y H:i:s', $timestamp);
echo $timestamp->format('Y-m-d H:i:s');
或者如果你喜欢更程序化的方式:
$timestamp = '31/05/2001 12:22:56';
$timestamp = date_create_from_format('d/m/Y H:i:s', $timestamp);
echo date_format($timestamp, 'Y-m-d H:i:s');
注意以前的建议。有些是完全错误的,有些可能会导致错误。
【讨论】:
澄清您可能在哪里遇到问题。当使用 strtotime() 分隔符很重要;在您的情况下,它是斜杠(/),意思是:美国格式为假定(m/d/Y)。如果分隔符为破折号 (-),则假定为欧洲格式 (d-m-Y)。所以,不要假设任何事情;)【参考方案2】:您可以使用 strtotime 和 date 来修改格式。
$new_date = date( "Y-m-d H:i:s", strtotime( $old_date ) );
它的作用是获取您的旧日期 (dd/mm/yyyy hh:mm:ss
),将其转换为 unix 时间戳,然后可以与 php date 函数一起使用将日期格式化为所需的格式。
【讨论】:
我无法让它工作它输出: string(33) "12121212-0505-0909 1212:0505:0000" From $startDatec= date("yyyy-mm-dd hh:mm :ss", strtotime($_POST['startEventDate'])); 对不起,实际格式是Y-m-d H:i:s
我的格式是为了说明它会返回什么。我的错。在这里查看日期函数 link 中的格式设置,所以它会是:$finalc= date("Y-m-d H:i:s", strtotime($_POST['finalDate']));
您的建议可能会导致错误的转换。看看我在评论中写了什么。
你是对的,假设常识会占上风。您使用 php 5.3+ 的实现可以完美运行,但我的解决方案适用于任何版本,并考虑到正确的考虑因素。
我在一定程度上同意。与所有以前的版本一样,5.3+ 版迟早会取代 5.2+ 版。所以,也许最好提前考虑一下,你不觉得吗?【参考方案3】:
几种可能的方法中的两种:
-
在代码中转换,然后将转换后的值传给mysql:
$mysqldate = date( 'Y-m-d H:i:s', $phpdate );
让 mysql 使用它的内置函数来完成这项工作:
$query = "UPDATE table SET datetimefield = FROM_UNIXTIME($phpdate) ...";
【讨论】:
【参考方案4】:如果您可以从上述格式中获得日期时间,那么您只需要使用以下功能。
function localToMysql($dateTime)
$date_chunks = explode('/', $dateTime);
$time_chunks = explode(' ', $date_chunks[2]);
$final_format = $time_chunks[0] . "-" . $date_chunks[1] . "-" . $date_chunks[0] . " " . $time_chunks[1];
返回 $final_format;
【讨论】:
以上是关于在 SQL 中使用 PHP 为 DATETIME 转换日期的主要内容,如果未能解决你的问题,请参考以下文章
MySQL 脚本将 DateTime.Ticks 值转换为 SQL Date
如何使用 PHP 为 MySQL DATETIME 类型生成日期?
转换SQL datetime以在输入类型datetime local中显示