在 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 查询的 SELECT 子句解析为 PHP 数组

转换SQL datetime以在输入类型datetime local中显示

在 PHP 中将 DOMTimeStamp 转换为 DATETIME

无法将 DateTime 从 SQL Server 转换为 C# DateTime