Date is inserting as 0000-00-00 00:00:00 in mysql

后端 未结 3 611
挽巷
挽巷 2021-01-13 14:57

My $date output is in the foreach loop

09/25/11, 02/13/11, 09/15/10, 06/11/10, 04/13/10, 04/13/10, 04/13/10, 09/24/09, 02/19/09, 12/21/

相关标签:
3条回答
  • 2021-01-13 15:18

    You don't have the century in your date, try to convert it like this:

    <?php
    $date = '09/25/11';
    $date = DateTime::createFromFormat('m/d/y', $date);
    $date = $date->format('Y-m-d');
    print $date;
    

    Prints:

    2011-09-25
    

    Now you can insert $date into MySQL.

    0 讨论(0)
  • 2021-01-13 15:24

    You're on the right track with your date('Y-m-d H:i:s',$date); solution, but the date() function takes a timestamp as its second argument, not a date.

    I'm assuming your examples are in American date format, as they look that way. You can do this, and it should get you the values you're looking for:

    date('Y-m-d H:i:s', strtotime($date));
    

    The reason it's not working is because it expects the date in the YYYY-MM-DD format, and tries to evaluate your data as that. But you have MM/DD/YY, which confuses it. The 06/11/10 example is the only one that can be interpreted as a valid YYYY-MM-DD date out of your examples, but PHP thinks you mean 06 as the year, 11 as the month, and 10 as the day.

    0 讨论(0)
  • 2021-01-13 15:39

    I created my own function for this purpose, may be helpful to you:

    function getTimeForMysql($fromDate, $format = "d.m.y", $hms = null){
        if (!is_string($fromDate))  
            return null ;       
        try {
            $DT = DateTime::createFromFormat($format, trim($fromDate)) ;
        } catch (Exception $e) { return null ;}
    
        if ($DT instanceof DateTime){
            if (is_array($hms) && count($hms)===3)
                 $DT->setTime($hms[0],$hms[1],$hms[2]) ;
            return ($MySqlTime = $DT->format("Y-m-d H:i:s")) ? $MySqlTime : null ;
        }
        return null ;
    }
    

    So in your case, you use format m/d/yy :

    $sql_date = getTimeForMysql($date, "m/d/yy") ;
    if ($sql_date){
      //Ok, proceed your date is correct, string is returned.
    }
    
    0 讨论(0)
提交回复
热议问题