It looks the above issue is only related to the SHORT date format, so a workaround is to set the format to something different.
For example the above code looks 'fix' the issue:
$dateFormatIso = Mage::app()->getLocale()->getDateFormat(
Mage_Core_Model_Locale::FORMAT_TYPE_LONG
);
Probably the short format is something 'ambiguous' for the js Date function
The problem is in Mage_Eav_Model_Entity_Attribute_Backend_Time_Created::beforeSave
. This line ends up swapping the month and day:
$zendDate = Mage::app()->getLocale()->utcDate(null, $date, true, $this->_getFormat($date));
This happens to just about all entity types including products and customers, and happens during creation and normal save events, in both CE >= 1.8.x and EE >= 1.13.x.
Override this model in your own module, and replace the beforeSave
method with this:
public function beforeSave($object)
{
$attributeCode = $this->getAttribute()->getAttributeCode();
$date = $object->getData($attributeCode);
if (is_null($date)) {
if ($object->isObjectNew()) {
$object->setData($attributeCode, Varien_Date::now());
}
} else {
// ADD THIS
$date = strtotime($date);
// convert to UTC
$zendDate = Mage::app()->getLocale()->utcDate(null, $date, true, $this->_getFormat($date));
$object->setData($attributeCode, $zendDate->getIso());
}
return $this;
}
This also needs to be corrected on the way out of the database. Replace afterLoad
with this:
public function afterLoad($object)
{
$attributeCode = $this->getAttribute()->getAttributeCode();
$date = $object->getData($attributeCode);
// ADD THIS
if (!is_null($date)) {
$date = strtotime($date);
}
$zendDate = Mage::app()->getLocale()->storeDate(null, $date, true, $this->_getFormat($date));
$object->setData($attributeCode, $zendDate->getIso());
parent::afterLoad($object);
return $this;
}
Edit: Here is an example of how to override this class.
<global>
<models>
<eav>
<rewrite>
<entity_attribute_backend_time_created>Mycompany_Mymodule_Model_Eav_Entity_Attribute_Backend_Time_Created</entity_attribute_backend_time_created>
</rewrite>
</eav>
</models>
</global>
Then create the file app\code\local\Mycompany\Mymodule\Model\Eav\Entity\Attribute\Backend\Time\Created.php
Best Answer
There is a setting for the calendar. It is called
hiliteToday
.If you change in
js/calendar/calendar.js
:to
'today' will not be selected by default.
Of course it is not ok to edit the code files, but I don't know yet how you can change that setting without touching the core. There is always the option of cloning the file, modify the cloned file and include your cloned file in the design, but I'm sure there is a cleaner way.
I will post when I find one.
This should be enough to get you started.