J'ai eu cette erreur de construction en essayant de créer un nouvel objet DateTime en utilisant un horodatage:
Exception: DateTime :: _construct (): Echec de l'analyse de la chaîne temporelle (1372622987) à la position 8 (8): caractère inattendu dans DateTime -> _ construct ().
Le code de création d'objet est:
$start_date = new DateTime( "@{$dbResult->db_timestamp}" );
Où $ dbResult-> db_timestamp est un horodatage Unix valide extrait d'une base de données. L'horodatage en question était:
1372622987
Je comprendrais cette erreur pour les formats non valides transmis, mais il s’agit d’un véritable horodatage.
La raison pour laquelle cela est très étrange: depuis, j’ai exécuté un script pour créer un nouvel objet DateTime avec l’horodatage transmis en tant que valeur codée en dur, et il n’a signalé aucune erreur.
Cela semble être un cas isolé, mais j'ai besoin d'une explication s'il en existe une, car je ne peux pas me permettre que cela se reproduise.
Vous devriez utiliser setTimestamp à la place, si vous le codez en dur:
$start_date = new DateTime();
$start_date->setTimestamp(1372622987);
dans ton cas
$start_date = new DateTime();
$start_date->setTimestamp($dbResult->db_timestamp);
Utilisez la méthode createFromFormat
:
$start_date = DateTime::createFromFormat("U", $dbResult->db_timestamp);
[~ # ~] met à jour [~ # ~]
Je recommande maintenant l'utilisation de Carbon
changez votre code pour cela
$start_date = new DateTime( "@" . $dbResult->db_timestamp );
et ça marchera bien
Cela a fonctionné pour moi.
/**
* return date in specific format, given a timestamp.
*
* @param timestamp $datetime
* @return string
*/
public static function showDateString($timestamp)
{
if ($timestamp !== NULL) {
$date = new DateTime();
$date->setTimestamp(intval($timestamp));
return $date->format("d-m-Y");
}
return '';
}
$start_date = new DateTime();
$start_date->setTimestamp($dbResult->db_timestamp);