2017-08-18 75 views
1

我在PHP中創建了下面這個函數來在數據庫中插入一些代碼詳細信息。我想在數據庫中存儲日期時間字段,因爲該json數據每分鐘更新一次。在PHP中使用SQL存儲日期時間(無秒)

function insert(){ 

     $jsonArray = json_decode(self::getTicker(), true); 

     var_dump($jsonArray); 

     foreach ($jsonArray as $value) { 
      $high = $value['high']; 
      $low = $value['low']; 
      $last = $value['last']; 
      $buy = $value["buy"]; 
      $sell = $value['sell']; 
      $date = $value['date']; 
      $vol = $value['vol']; 
     } 
     $dateF = gmdate("Y-m-d H:i:s", $date); 

     $sql = "INSERT INTO `ticker_history` 
     (`ticker_history_high`, 
     `ticker_history_low`, 
     `ticker_history_vol`, 
     `ticker_history_last`, 
     `ticker_history_buy`, 
     `ticker_history_sell`, 
     `ticker_history_date`) 
     VALUES 
     (?, ?, ?, ?, ?, ?, ?)"; 
     $stmt = $this->conn->prepare($sql); 
     $stmt->bind_param("dddddss", $high,$low,$vol,$last,$buy,$sell,$dateF); 
     $result = $stmt->execute(); 
     $stmt->close(); 

     if ($result) { 
       // ticker successfully inserted 
      return print_r(TICKER_CREATED_SUCCESSFULLY); 

     } else{ 
      return print_r(TICKER_CREATE_FAILED); 
     } 
} 
+0

將'gmdate(「Y-m-d H:i:s」,$ date);''改成'gmdate(「Y-m-d H:i」,$ date);'? –

+0

數據庫*中的'DATETIME'字段有*秒* - 它是數據類型的一部分...當然,如果將日期格式化爲'Ymd H:i:00',則將其格式化爲if你不需要秒。 – CD001

+0

我試圖做到這一點,但它存儲的數據:00秒 –

回答

1

日期時間列使用結構Y-M-d H:我:■

它將始終商店秒。然而,你可以使用PHP的DateTime類對日期進行格式像這樣:

$date = new DateTime(); 
echo $date->format('Y-m-d H:i'); // outputs 2017-08-18 17:05 

當查詢數據庫,在WHERE子句中,你可以說:

...WHERE datecolumn = '".$date->format('Y-m-d H:i:00')."' etc 

例子:

$date = new DateTime(); 
echo $date->format('Y-m-d H:i:s')."\n"; // 2017-08-18 17:09:15 
echo $date->format('Y-m-d H:i:00')."\n"; // 2017-08-18 17:09:00 

見它的行動:https://3v4l.org/D47pA

順便說一句,你可以傳入你的字符串到DateTime構造uctor像

new DateTime($row['datecolumn']);

0

只要改變$dateF這樣:

gmdate('d-m-y H:i',strtotime($date))); 

或者這在您的SQL查詢:

DATE(date, '%Y-%M-%d %H:%i') 

在MariaDB的:

DATE_FORMAT(date, '%H:%i') 
+0

儘管MariaDB的'DATETIME'數據類型的結構不會變成結構 - 它仍然會在數據庫中以「Ymd H:i:00」結尾。 – CD001

+0

我試圖改變這個變量$ dateF,但它不起作用 –

+0

@MateusMascarenhas我在MariaDbs中添加了工作的功能? –

0

使用strtotime() -

$dateF = gmdate('g:ia', strtotime($date)); 

date() function - string date (string $format [, int $timestamp = time() ]) - ,其中$timestamp是是整數Unix時間戳。

+0

這意味着將數據類型從'DATETIME'更改爲'INT(10)unsigned'...,如果要使用數據庫的本機數據操作函數(不再是日期),將會使生活變得棘手。總之 - 這不是一個好主意。 – CD001

+0

否它不這樣做,但從時間戳中刪除秒。 strtotime()在PHP中,將datetime轉換爲time() –

0

對於直的MySQL/MariaDB的解決方案,適應這樣的:

mysql> SELECT DATE_FORMAT(now(), "%Y-%m-%d %H:%i"); 
+--------------------------------------+ 
| DATE_FORMAT(now(), "%Y-%m-%d %H:%i") | 
+--------------------------------------+ 
| 2017-08-21 21:35      | 
+--------------------------------------+ 

注:存儲在表中的值將是一個正確的DATETIME2017-08-21 21:35:00TIMESTAMP

這種方法比使用PHP計算日期要少編碼。

相關問題