2016-09-24 31 views
0

我想从MySQL数据库中选择数据并将其显示在表格中,该表格目前工作正常,但我遇到了日期格式问题。使用PHP重新格式化MySQL日期

我想重新格式化MySQL日期为dd/mm/YY,但我不知道该怎么做,因为我没有专门选择日期列。我只是从表中选择所有列。

代码:

<?php 
echo "<table style='border: solid 1px black;'>"; 
echo "<tr><th>Id</th><th>Name</th><th>Date</th></tr>"; 

class TableRows extends RecursiveIteratorIterator { 
    function __construct($it) { 
     parent::__construct($it, self::LEAVES_ONLY); 
    } 

    function current() { 
     return "<td style='width: 150px; border: 1px solid black;'>" . parent::current(). "</td>"; 
    } 

    function beginChildren() { 
     echo "<tr>"; 
    } 

    function endChildren() { 
     echo "</tr>" . "\n"; 
    } 
} 

$servername = ""; 
$username = ""; 
$password = ""; 
$dbname = ""; 

try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username,  $password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $stmt = $conn->prepare("SELECT * FROM users"); 
    $stmt->execute(); 

    $result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 

    foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) { 
     echo $v; 
    } 
} 
catch(PDOException $e) { 
    echo "Error: " . $e->getMessage(); 
} 
$conn = null; 
echo "</table>"; 
?> 
+0

在其他编程语言(如c#和java)中,我们可以获得列类型。我认为这也可能在PHP中。通过了解列类型,您可以决定如何显示它。 –

回答

0

万一我的$k前提是列和$v为价值是正确的,那么这应该工作:

foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) { 
switch ($k) { 
     case '{{column_name}}': 
      // Format {{column_name}} as you like, e.g: 
      $date_time = strtotime($v); 
      print date("d-m-y", $date_time); 
      break; 
     default: 
      echo $v; 
      break; 
} 
} 
+0

谢谢,这个作品!但我有问题,我无法转换日期。如果我使用$ v,输出总是01.01.1970。 – Uwe

+0

@Uwe oops,我的不好,简单地做'd-m-Y' =>'d-m-y'。我也更新了答案。 – DanielTheGeek

+0

不好意思回答迟到。坦克很多你的帮助! – Uwe

0

是不是那个$ k是列名和$ v是价值?

如果是的话,那么你就可以很容易地检测到该日期列值,进行格式化:

foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) { 
    switch ($k) { 
      case 'date_column': 
       // echo formatted $v 
       break; 
      default: 
       echo $v; 
       break; 
    } 
}