Je veux entrer un horodatage au format ci-dessous dans la base de données.
yyyy-mm-dd hh:mm:ss
Comment puis-je entrer dans le format ci-dessus?
Quand j'utilise
$date = new Zend_Date();
il retourne mois jj, aaaa hh: mm: ss PM
J'utilise également un calendrier JavaScript pour insérer une date sélectionnée et il retourne au format jj-mm-aaaa format
Maintenant, je veux convertir ces deux formats en aaaa-mm-jj hh: mm: ss pour pouvoir être insérés dans la base de données. Comme le format de date ne correspond pas au format du champ de base de données, la date n'est pas insérée et n'est remplie que par * 00-00-00 00:00:00 *
Merci de répondre
Je ne sais pas si cela vous aidera, mais essayez d'utiliser:
// to show both date and time,
$date->get('YYYY-MM-dd HH:mm:ss');
// or, to show date only
$date->get('YYYY-MM-dd')
Techniquement, @stefgosselin a donné la réponse correcte pour Zend_Date
, mais Zend_Date
est complètement excessif pour obtenir simplement l'heure actuelle dans un format commun. Zend_Date
est incroyablement lent et fastidieux à utiliser par rapport aux extensions natives de PHP. Si vous n'avez pas besoin de traduction ou de localisation dans votre sortie Zend_Date
(et vous ne l'êtes apparemment pas), restez à l'écart.
Utilisez la fonction date
native de PHP pour cela, par exemple.
echo date('Y-m-d H:i:s');
echo date_format(date_create(), 'Y-m-d H:i:s');
$dateTime = new DateTime;
echo $dateTime->format('Y-m-d H:i:s');
Ne commettez pas l'erreur commune d'utiliser chaque composant proposé par Zend Frameworks simplement parce qu'il le propose. Il n’est absolument pas nécessaire de le faire et, en fait, si vous pouvez utiliser une extension native PHP pour obtenir le même résultat avec un effort moindre ou comparable, la solution native vous ira mieux.
De même, si vous souhaitez enregistrer une date dans votre base de données, avez-vous utilisé l'une des colonnes liées à DateTime dans votre base de données ? En supposant que vous utilisiez MySql, vous pouvez utiliser une colonne Timestamp ou une colonne Date ISO8601.
Voici comment je l'ai fait:
abstract class App_Model_ModelAbstract extends Zend_Db_Table_Abstract
{
const DATE_FORMAT = 'yyyy-MM-dd';
public static function formatDate($date, $format = App_Model_ModelAbstract::DATE_FORMAT)
{
if (!$date instanceof Zend_Date && Zend_Date::isDate($date)) {
$date = new Zend_Date($date);
}
if ($date instanceof Zend_Date) {
return $date->get($format);
}
return $date;
}
}
de cette façon, vous n'avez pas besoin de vous demander si c'est réellement une instance de zend date, vous pouvez passer une chaîne ou autre chose qui est une date.
un moyen simple d'utiliser Zend Date est de créer une fonction spécifique dans ses objets métier qui permet de paramétrer cette fonction au format de date. Vous pouvez trouver un bon exemple à cette adresse http://www.pylejeune.fr/framework/utiliser-les-date-avec-zend_date/
c'est je l'ai fait:Zend_Date::now->toString('dd-MM-yyyy HH:mm:ss')
La sortie de ce format est "24-03-2012 13:02:01"
et vous pouvez modifier votre format de date
J'ai toujours utilisé la méthode $date->__toString('YYYY-MM-dd HH-mm-ss');
dans le passé, mais aujourd'hui, cela n'a pas fonctionné. Je recevais la sortie par défaut de '1 nov. 2013 12:19:23 PM'
Donc aujourd'hui, j'ai utilisé $date->get('YYYY-MM-dd HH-mm-ss');
comme mentionné ci-dessus. Semble avoir résolu mon problème.
Vous trouverez plus d'informations à ce sujet sur les formats de sortie ici: http://framework.zend.com/manual/1.12/fr/zend.date.constants.html