Magento module personnalisé champ date d'enregistrement de la date à un jour avant la date sélectionnée
j'ai suivi les étapes sur ce lien pour ajouter un champ de date pour mon module personnalisé :
http://magentomechanic.blogspot.com/2010/01/to-add-custom-date-field-in-custom.html
Tout s'est bien passé, sauf que lorsque je sélectionne une date et d'enregistrer des configurations, il me renvoie la date d'un jour avant d'être sélectionné 🙁
Par Exemple :
Lorsque je sélectionne 25 Fév, 2012 et enregistrer , il vous permettra d'économiser et de retour 24 Fév, 2012.
Avis il a sauvé un jour avant 🙁
je reçois quand je print_r($model) dans l'admin contrôleur avant d'enregistrer:
[start_date] => 2012-01-24 16:00:00 //i set it to 25 but its saving 24
[end_date] => 2012-01-26 16:00:00 //i set it to 27 but .....
[status] => 1 [content] => asdasdadsd
[created_time] => 2012-01-25 07:27:11 //it gives current date and it is O'rite
[update_time] => 2012-01-25 07:27:11 ) //it gives current date and it is O'rite
REMARQUE:
je l'écho de la date d'affichage et c'était tout ce que j'avais à dire qu'il n'y est pas de problème avec les données post,
dire côté client est claire pour tout bug, donc où réside le problème, c'est quand il est converti à enregistrer dans la base de données !!! Toute aide ???
Voici mon initiall code j'ai essayé :
if($data['start_date'] != NULL )
{
$date = Mage::app()->getLocale()->date($data['start_date'], Zend_Date::DATE_SHORT);
$model->setStartDate($date->toString('YYYY-MM-dd HH:mm:ss'));
}
if($data['end_date'] != NULL)
{
$date1 = Mage::app()->getLocale()->date($data['end_date'], Zend_Date::DATE_SHORT);
$model->setEndDate($date1->toString('YYYY-MM-dd HH:mm:ss'));
}
ensuite, j'ai essayé celui-ci :
echo $format = Mage::app()->getLocale()->getDateFormat(Mage_Core_Model_Locale::FORMAT_TYPE_SHORT).'<br/>';
if($data['start_date'] != NULL )
{
echo $data['start_date']."<br/>"; //01/27/12 correct date posted which i entered
$date = Mage::app()->getLocale()->date($data['start_date'], $format);
echo $date; ///Jan 26, 2012 4:00:00 PM but here we get back to one day
$time = $date->getTimestamp();
$model->setStartDate(Mage::getSingleton('core/date')->date(null, $time));
//$model->setStartDate($date->toString('YYYY-MM-dd HH:mm:ss'));
}
if($data['end_date'] != NULL)
{
echo $data['end_date'].'<br/>';
$date1 = Mage::app()->getLocale()->date($data['end_date'], $format);
$time = $date1->getTimestamp();
$model->setEndDate(Mage::getSingleton('core/date')->date(null, $time));
//$model->setEndDate($date1->toString('YYYY-MM-dd HH:mm:ss'));
}
$format échos : j/M/aa
d'origine date d'affichage : 01/27/12
$date echo résultat :Jan 26, 2012 4:00:00 PM
- Avez-vous vérifié si les valeurs sont correctement présentées par le formulaire? Sont-ils corrects lorsque le programmateur d'action? Si pas, vous avez un problème côté client. Si elles sont correctement présentées: qu'est-ce qui
echo date_default_timezone_get();
juste avant votreprint_r
donner? - son UTC quand je lui faisait écho 🙂
Vous devez vous connecter pour publier un commentaire.
Je suis tombé sur ce post, lors de la navigation pour une question similaire à propos des dates dans Magento. Malheureusement, ces réponses ne m'a pas aidé, mais je suis de retour pour partager un couple de choses sur les dates qui, je l'espère, sera utile pour quelqu'un d'autre.
Tout d'abord, Magento magasins de dates en DB dans le fuseau horaire UTC. De cette manière, il exige le même code et la même logique d'afficher les informations de vos clients au royaume-UNI, de NOUS ou de l'UA.
Vérifiez soigneusement, il s'enregistre pas "un jour avant", mais 8 heures avant (25 Jan 2012 00:00:00 => 2012-01-26 16:00:00).
Deuxième chose importante: Magento fournit standard généré dynamiquement des getters et setters pour les champs de base de données. Donc, si vous avez ajouté vos champs personnalisés pour un Produit ou un Client que vous n'avez pas besoin de définir vos propres méthodes de lecture/écriture à la base de données. Votre classe, quelque chose comme:
class MyOrg_MyModule_Model_Customer extends Mage_Customer_Model_Customer
aura méthodes$this->getStart_date()
et$this->setStart_date($datetime)
même pour vos champs personnalisés. Vous pouvez également utiliser la méthode$this-setData('start_date', $datetime);
et puis$this->save();
Cette information vous aidera à comprendre quel Fuseau horaire paramètres sont requis par le standard de Magento fonctions:
De simplicité et de rapidité, je vous suggère d'utiliser des horodateurs pour la date de votre calculs et les comparaisons. Et de convertir l'heure dans le fuseau horaire que pour l'afficher.
Bien des choses incroyables qui s'est passé !
je viens de supprimé le code de l'admin contrôleur qui était de sauver les dates des champs et Tout bon !!!
Il a sauvé le jour automatiquement dans la base de données.
Cela peut aider beaucoup et gagner du temps contrairement à moi, j'ai passé la plupart du temps sur elle.
C'est vraiment une étrange question. C'est ce qui a fonctionné pour moi dans un _filterDate fonction:
si la date est un jour avant celui sélectionné essayer
set 'useTimezone' à False dans
/app/code/core/Mage/Core/Model/Locale.php
date($date = null, $partie = null, $locale = null, $useTimezone = true)
Assurez-vous, lorsque vous enregistrez la date à vous de faire un peu comme ce
Ensuite pour arriver bon fuseau horaire date d'utilisation de certains, comme ce
Cela a résolu mon problème, ne sais pas si c'est la bonne façon de faire ou de ne pas mais j'étais plus préoccupé par sa résolution
print_r()
vos données de contrôleur et de sortie avant de l'enregistrer et de regarder si vous obtenez toujours le droit de données avant de l'enregistrer. Je n'ai jamais eu ce problème, mais il semble être question de votre fuseau horaire.