是否将PHP m/d/y中的日期格式化为y-m-d?

是否将PHP m/d/y中的日期格式化为y-m-d?,php,mysql,date,datetime,Php,Mysql,Date,Datetime,我正在尝试格式化一个从web上撕下的日期字符串。日期以m/d/y的形式输入,我需要将其插入MYSQL。当前,我遇到一个错误PHP致命错误:对非对象调用成员函数format() 代码: <?php include 'ganon.php'; $id = array(8573, 53816, 7746, 80748, 7714); for($l=0; $l<sizeof($id); $l++) { $html = file_get_dom("http://pregame.com/preg

我正在尝试格式化一个从web上撕下的日期字符串。日期以m/d/y的形式输入,我需要将其插入MYSQL。当前,我遇到一个错误PHP致命错误:对非对象调用成员函数format()

代码:

<?php
include 'ganon.php';
$id = array(8573, 53816, 7746, 80748, 7714);

for($l=0; $l<sizeof($id); $l++) {
$html = file_get_dom("http://pregame.com/pregamepros/pro-bettor/picks.aspx?id=" . $id[$l]);

$picks = $html('div[class="div-table-col"]');

$array = array();
$j =0;
for($i=0; $i<sizeof($picks); $i+=8) {
    $array[$j] = array("date" => trim($picks[$i]->getPlainText()), 
            "sport" => trim($picks[$i+1]->getPlainText()),
            "pick" => trim($picks[$i+2]->getPlainText()),
            "score" => trim($picks[$i+3]->getPlainText()),
            "odds" => trim($picks[$i+4]->getPlainText()),
            "size" => preg_replace('/\$/', "", $picks[$i+5]->getPlainText()),
            "winloss" => trim($picks[$i+6]->getPlainText()),
            "money" => (int)preg_replace('/\$/', "", $picks[$i+7]->getPlainText()));
    $j++;
} 

//enter picks into database
//make sure we do not add picks we already have
$mysqli = new mysqli("host", "user", "pass", "db");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    exit();
}
if($id[$l] == 8573) {
//$query = "SELECT `date` FROM `db`.`vegasrunner` where date=" . date('Y-m-d');
for($i=0; $i<sizeof($array); $i++) {
$query = "SELECT `date`,`pick` FROM `db`.`vegasrunner` where date=" . "'" . $array[$i]["date"] . "'" . " AND pick=" . "'" . $array[$i]["pick"] . "'";
$result = $mysqli->query($query);
$row = $result->fetch_row();
if(sizeof($row) < 1) {
    $result->close();
    $date = new DateTime();
    $date = DateTime::createFromFormat('m/d/y', $array[$i]["date"]);
    //$date = $array[$i]["date"];
    $sport = $array[$i]["sport"];
    $pick = $array[$i]["pick"];
    $score = $array[$i]["score"];
    $odds = $array[$i]["odds"];
    $size = $array[$i]["size"];
    $winloss = $array[$i]["winloss"];
    $money = $array[$i]["money"];

    echo $date->format('Y-m-d');

    $query = "INSERT INTO `db`.`vegasrunner` (`date`, `sport`, `pick`, `score`, `odds`, `size`, `winloss`, `money`) VALUES (" . "'" . $date->format('Y-m-d') . "'" . ", '$sport', '$pick', '$score', '$odds', '$size', '$winloss', '$money')";

    $mysqli->query($query);
}
    } }  

我能看到的唯一合理解释是,如果
createFromFormat()
失败,如果输入日期不是您期望的格式,则可能会发生这种情况


检查输入字符串是否符合您认为的格式,并修改代码以在
createFromFormat()
调用中包含失败检查。

我最后编写了自己的函数来解析日期。原来在这个月之前有一个隐藏的空间

function formatDate($date) {
    //date = 07/12/13
    $date = explode('/', $date);
    //for some reason in ubuntu month had a space had to get last 2 characters
    $month = substr($date[0], -2);
    $day = trim($date[1]);
    $year = date('y') == $date[2] ? date('Y') : date('Y');

    return $year . "-" . $month . "-" . $day;
}
createFromFormat()
在失败时返回
FALSE
createFromFormat()
还返回一个新的DateTime对象,例如,它基本上是一个构造。紧靠createfromformat之前的
$date=new DateTime()
无效,因为createfromformat中的新日期将覆盖它。