2013-07-12 51 views
0

我想格式化日期字符串我rip從網上日期進來作爲m/d/y,我需要將它插入到MYSQL當前我得到一個錯誤PHP致命錯誤:調用成員函數格式()一個非對象格式日期爲PHP m/d/y至Y-m-d?

代碼:

<?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); 
} 
    } } 
+0

'createFromFormat()'在失敗時返回'FALSE'。 –

+0

'createFormFormat()'也返回一個新的DateTime對象,例如它基本上是一個結構。你的'$ date = new DateTime()'在createfromformat無用之前,因爲createfromformat的新日期會覆蓋它。 –

回答

0

我寫了我自己的函數來解析日期。事實證明,這個月前有一個隱藏的空間。

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; 
} 
1

,唯一合理的解釋,我可以看到的是,如果createFromFormat()失敗,如果輸入的日期是不是在您期望的格式可能發生。

檢查輸入字符串是否符合您的想法,並更改您的代碼以在createFromFormat()調用中包含失敗檢查。