MySql& PHP - 如何将字符串转换为DATETIME

时间:2010-12-17 15:48:26

标签: php mysql datetime

我有一些数据(由用户插入),如:

  1. 10-12-2010
  2. XX-12-2010
  3. 10-XX-2010
  4. 10-12-XXXX
  5. (请注意,我没有插入数据时添加XX(或XXXX)。)

    如何使用MySql语法将这些字符串转换为 DATETIME

    由于

    更新

    $day=(is_numeric($_POST['day']) && $_POST['day'] > 0 && $_POST['day'] < 32) ? $_POST['day'] : '00';
    $month=(is_numeric($_POST['month']) && $_POST['month'] > 0 && $_POST['month'] < 13) ? $_POST['month'] : '00';
    $year=(is_numeric($_POST['year']) && $_POST['year'] > 1999 && $_POST['year'] < (date("Y")+1)) ? $_POST['year'] : '0000';            
    $data=$year."-".$month."-".$day;
    $mysqlDate=date('Y-m-d', strtotime($data));
    echo $mysqlDate;
    

    有一个问题:如果数据是*空 - 12-2010“它打印 2010-11-30 。为什么?

6 个答案:

答案 0 :(得分:2)

在MySQL的语法中,您可以使用函数STR_TO_DATE()

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date

mysql> SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y'); // -> '2013-05-01'
mysql> SELECT STR_TO_DATE('May 1, 2013','%M %d,%Y'); // -> '2013-05-01'

答案 1 :(得分:1)

您可以使用php的strtotime功能。

  

strtotime - 解析任何英语   文本日期时间描述成一个   Unix时间戳

您应该查看您可以使用它来处理字符串的格式。

答案 2 :(得分:1)

如果您确定不想要求所有日期字段,只需填写零(如果它们不存在),如下所示:

$month = ($_POST['month'] == '') ? '00' : $_POST['month'];

否则,如果您不担心空白日期,而是担心非标准输入,您可以这样做:

$month = (is_numeric($_POST['month']) && $_POST['month'] > 0 && $_POST['month'] < 13) ? $_POST['month'] : '00'

$date = date('Y-m-d G:i:s', strtotime($_POST['dataThatUserEntered']));

应该这样做,不是吗?

请确保验证用户输入,否则如果他们输入了疯狂的内容,您可能会发现$date = '1970-01-01 00:00:00

答案 3 :(得分:1)

  

有一个问题:如果数据是* empty-12-2010“它打印2010-11-30。

为什么呢? 因为strtotime正在读取不存在的00-12-2010,所以它将它转换为12月1日的前一天,即数字12月0日,或者在11月30日的reallife!

答案 4 :(得分:0)

Mysql自动完成转换。您可以看到接受的格式here。但是你应该知道xxx并强制要求这些字段。

答案 5 :(得分:0)

好吧,你可以使用date(),使用格式和字符串。

$mysqlDate = date( 'Y-m-d', $stringDate );