使用php,我如何将char字段的所有行(如“11/19/10”)转换为日期字段?

时间:2010-10-18 15:30:20

标签: php mysql

为了使用phpmyadmin将一列日期导入mysql,我将该字段定义为char字段。

所以现在日期在mysql表中如下所示:

ID | Name | DateArriving
1  | bill | 11/19/10
2  | tom  | 12/1/10

等......

我希望将DateArriving字段格式化为实际日期,以便我可以执行某些查询,例如“谁将在下周到达”。

我想了解PHP代码应如何进行此转换的指导。

谢谢。

我使用的附加最终解决方案:

最后,我结合使用了几个答案:

$select_trips = "SELECT * FROM trips WHERE STR_TO_DATE(DateArriving, '%m/%d/%Y') BETWEEN NOW() AND NOW() + INTERVAL 1 WEEK"; 

5 个答案:

答案 0 :(得分:2)

使用strtotime您可以将日期转换为时间

http://php.net/manual/en/function.strtotime.php

然后传递该时间到期日函数并根据需要格式化

 date('l F Y h:i:s A', $timestamp);

请参阅上面链接中的示例

使用date_diffor diff进行比较

答案 1 :(得分:1)

如果您使用DATETIME列类型作为日期,则可以执行

SELECT Name, DateArriving
  FROM Arrivals 
 WHERE DateArriving BETWEEN NOW() AND NOW() + INTERVAL 2 WEEK;

并且根本不需要在PHP中进行任何转换。

使用DATETIME列还允许您为查询参数传递不同的日期格式,因此在对列执行语句时,您不依赖于特定格式,例如

// create a new DB connection and prepare statement
$db = new mysqli('127.0.0.1', 'foo', 'secret', 'dbname');
$stmt = $db->prepare(
    'SELECT Name FROM Arrivals WHERE DateArriving BETWEEN ? AND ?');

// bind the query params in two different time formats
$startDate = date('Y/m/d');
$endDate   = date('Y-m-d', strtotime('+2 weeks'));
$stmt->bind_param('ss', $startDate, $endDate);

// execute the query and fetch the first result
$stmt->execute();
$stmt->bind_result($result);
$stmt->fetch();
printf ("%s\n", $result);
$stmt->close();

请参阅DateTime functions in MySQL

答案 2 :(得分:1)

SELECT STR_TO_DATE(DateArriving, '%m/%d/%Y') FROM TABLE

答案 3 :(得分:0)

现在,我不是一个大城市的SQL大师,但我会这样做:

  1. 使用您真正想要的结构创建一个新表

  2. 逐行读取现有表中的数据,将日期转换为MySQL可以理解的格式,然后将其插入新表中

  3. 删除原始表

  4. 将新表重命名为现有代码所需的内容

  5. 感谢$ DEITY文本日期是一致的格式而不是用户提供的不兼容区域变化的混搭(如d / m / yyyy与m / d / yyyy混合)

    < / LI>

答案 4 :(得分:0)

$select_trips = "SELECT * FROM trips 
              WHERE STR_TO_DATE(DateDeparting, '%m/%d/%Y') 
              BETWEEN NOW() AND NOW() + INTERVAL 1 WEEK