Failed to parse time string (1679306534) at position 7 (5)

Loddar1

Erfahrenes Mitglied
Hallo alle miteinander,
ich habe ein Problem mit dar Datums ausgabe pdo prepared statement.

Hier mal mein Code:
PHP:
$statement = $con->prepare("SELECT timestamp,onlineseit FROM `cc_online`");
$statement->execute();
while ($row = $statement->fetch()) 
  {
 $date = new DateTime($row['timestamp']);   // line 40
 $dateFormatted = $date->format('d.m.y H:i');
 echo $dateFormatted;
 }
Xampp

PHP-Ver.: 8.2.0 - Zend-Ver.: 4.2.0
MySQLi-Ver.: 10.4.27-MariaDB
Funktioniert

Server:
PHP-Ver.: 8.2.4 - Zend-Ver.: 4.2.4
MySQLi-Ver.: 5.7.38-log

Fehlermeldung:
20.03.23 20:23
Fatal error: Uncaught Exception: Failed to parse time string (1679306534) at position 7 (5): Unexpected character in /mnt/web407/b2/50/5943050/htdocs/sites/home.php:40 Stack trace: #0 /mnt/web407/b2/50/5943050/htdocs/sites/home.php(40): DateTime->__construct() #1 /mnt/web407/b2/50/5943050/htdocs/index.php(48): require('...') #2 {main} thrown in /mnt/web407/b2/50/5943050/htdocs/sites/home.php on line 40

Ich weis keinen Rat
Kann mir einer helfen?
Danke im vorraus Loddar1
 
Der Constructor von DateTime akzeptiert eine Menge von Formaten, wie aus der Doku hervor geht. Wie sieht denn der Parameter $row['timestamp'] aus, den Du übergibst? Am besten mal mit var_dump ausgeben lassen.
 
2023-03-20 17:13:41
habe ich wohl vergessen mit rein zu schreiben

PHP:
$stmt = $con->prepare('SELECT id, regtime, logtime FROM tabelle WHERE id=?');
$stmt->execute(array($sids));   
while($rows = $stmt->fetch()) {
$id = $rows["id"];
$regtime = $rows["regtime"];
$logtime = $rows["logtime"];
}

$datum=new DateTime($regtime);
$datum1=new DateTime($logtime);


echo $datum->format('d.m.Y - H:i:s');
echo $datum1->format('d.m.Y - H:i:s');

funktioniert auf dem Server
 
Hm, das ist aber jetzt eine ganz andere Abfrage als die problematische in deinem erste Posting. In dem Fall akzeptiert DateTime offenbar die Parameter. Wenn es das bei dem ersten Code nicht tut muss der Parameter dort anders aussehen. Lass ihn mit var_dump ausgeben, dann bekommst Du auch Infos über den Typ:
Code:
$statement = $con->prepare("SELECT timestamp,onlineseit FROM `cc_online`");
$statement->execute();
while ($row = $statement->fetch())
  {
    var_dump($row['timestamp']);
 $date = new DateTime($row['timestamp']);   // line 40
 $dateFormatted = $date->format('d.m.y H:i');
 echo $dateFormatted;
 }
 
So kommt keine Fehlermeldung:
PHP:
$stmt = $con->prepare('SELECT timestamp, onlineseit FROM cc_online');
$stmt->execute();  
$rows = $stmt->fetch();
echo $rows["timestamp"];
echo'<br>';
echo $rows["onlineseit"];
echo'<br>';

Ausgabe Server:
2023
1679306577
 
Zuletzt bearbeitet:
Warum ignorierst Du dies:
Lass ihn mit var_dump ausgeben, dann bekommst Du auch Infos über den Typ:
Im Falle von "onlineseit" wissen wir jetzt nicht ob die Ausgabe numerisch oder ein String ist, wobei ersteres sehr stark zu vermuten ist. Und beides ist AFAIK kein gültiges Format für eine Übergabe an DateTime.
 
PHP:
$statement = $con->prepare("SELECT timestamp,onlineseit FROM `cc_online`");
$statement->execute();
while ($row = $statement->fetch())
  {
    var_dump($row['timestamp']);
 $date = new DateTime($row['timestamp']);   // line 40
 $dateFormatted = $date->format('d.m.y H:i');
 echo $dateFormatted;
 echo'<br>';
     var_dump($row['onlineseit']);
 $dater = new DateTime($row['onlineseit']);   // line 40
 $dateFormattedr = $dater->format('d.m.y H:i');
 echo $dateFormattedr;
 }

Ausgabe XAMPP:
string(19) "2023-03-20 17:13:41" 20.03.23 17:13
string(19) "2023-03-20 11:59:45" 20.03.23 11:59
 
PHP:
$statement = $con->prepare("SELECT timestamp,onlineseit FROM `cc_online`");
$statement->execute();
while ($row = $statement->fetch())
  {
    var_dump($row['timestamp']);
 $date = new DateTime($row['timestamp']);   // line 39
 $dateFormatted = $date->format('d.m.y H:i');
 echo $dateFormatted;
 echo'<br>';
     var_dump($row['onlineseit']);
 $dater = new DateTime($row['onlineseit']);   // line 44
 $dateFormattedr = $dater->format('d.m.y H:i');
 echo $dateFormattedr;
 }

Fehlermeldung Server:

int(2023) 20.03.23 20:23
int(1679306577) Fatal error: Uncaught Exception: Failed to parse time string (1679306577) at position 7 (5): Unexpected character in /mnt/web407/b2/50/5943050/htdocs/sites/home.php:44 Stack trace: #0 /mnt/web407/b2/50/5943050/htdocs/sites/home.php(44): DateTime->__construct() #1 /mnt/web407/b2/50/5943050/htdocs/index.php(48): require('...') #2 {main} thrown in /mnt/web407/b2/50/5943050/htdocs/sites/home.php on line 44
 
Zurück