web-dev-qa-db-fra.com

PHP Zend date format

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

13
maniclorn

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') 
24
stefgosselin

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');

ou API procédurale DateTime

echo date_format(date_create(), 'Y-m-d H:i:s');

ou API d'objet DateTime

$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.

13
Gordon

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. 

4
Fatmuemoo

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/

3
lothar

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

1
akubabas

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

0
Lionel Morrison