使用php,如何转换char字段的所有行,例如;“2010年11月19日”;到日期字段?

使用php,如何转换char字段的所有行,例如;“2010年11月19日”;到日期字段?,php,mysql,Php,Mysql,为了使用phpmyadmin将日期列导入mysql,我将该字段定义为char字段 现在,mysql表中的日期如下所示: ID | Name | DateArriving 1 | bill | 11/19/10 2 | tom | 12/1/10 等等 我希望DateArriming字段被格式化为实际日期,这样我就可以进行某些查询,例如“谁将在下周到达” 我想知道PHP代码如何进行这种转换 多谢各位 我使用的最终解决方案附录: 最后,我结合了几个答案: 使用strotime可以将日期转换为

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

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

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

我希望DateArriming字段被格式化为实际日期,这样我就可以进行某些查询,例如“谁将在下周到达”

我想知道PHP代码如何进行这种转换

多谢各位

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


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


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

然后传递time-to-date函数,并根据需要格式化它

 date('l F Y h:i:s A', $timestamp);
请参见上面链接中的示例


使用date_diff或diff进行比较

如果要使用日期时间列类型作为日期,可以

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();

请看。

现在,我不是大城市的SQL专家,但我会这样做:

ID | Name | DateArriving
1  | bill | 11/19/10
2  | tom  | 12/1/10
  • 创建一个具有您真正想要的结构的新表

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

  • 放下原来的桌子

  • 将新表重命名为现有代码所需的名称

  • 感谢$Dedity,文本日期采用单一一致的格式,而不是用户提供的不兼容区域变体(如d/m/yyyy与m/d/yyyy混合)


  • 您没有使用
    DATETIME
    字段的任何原因?除了格式化之外?如果我有问题的话,我在开始时没有使用DATETIME字段的原因是,在执行.csv导入之前,指定DATETIME字段似乎不适用于EXCEL样式的日期--日期值都显示为0000-00-00:00:00。谢谢,一旦我得到所有设置的数据,我将尝试这段代码。最后,我使用了几个答案的组合:$select_trips=“select*FROM trips,其中STR_TO_DATE(datedefating,'%m/%d/%Y')介于NOW()和NOW()之间+间隔1周”;谢谢
    SELECT STR_TO_DATE(DateArriving, '%m/%d/%Y') FROM TABLE
    
    $select_trips = "SELECT * FROM trips 
                  WHERE STR_TO_DATE(DateDeparting, '%m/%d/%Y') 
                  BETWEEN NOW() AND NOW() + INTERVAL 1 WEEK