Magento2 Datetime – How to Save Local Date in Custom Datetime Field

datetimemagento2

I have been doing this in Magento 1 to save my local date like this:

//in my custom controller
$data = $this->_filterDateTime($this->getRequest()->getPost('my_name'), array("date"));

Now, is there similar way to do this in Magento 2?

What I have done so far:

//in constructor 
\Magento\Framework\Stdlib\DateTime\TimezoneInterface $timeZoneInterface,
\Magento\Framework\Stdlib\DateTime $dateTime,

$this->_timeZone = $timeZoneInterface;
$this->dateTime = $dateTime;


/////////////
//in my function
/////////////

//format d/m/y
//timezone Australia/Sydney
$date = $this->dateTime->formatDate(('17/08/18 2:16:35 pm');

//this also didn't work
$date = $this->_timeZone->convertConfigTimeToUtc('17/08/18 2:16:35 pm');

Error thrown:

date. DateTime::__construct(): Failed to parse time string (17/08/18
2:16:35 pm) at position 0 (1): Unexpected character

If I change 17/08/18 2:16:35 pm to 12/08/18 2:16:35 pm then it works perfectly.

I am unable to tell Magento that my format is d/m/y.

Best Answer

I can see, M2 has similar function as M1 in controller class

//$this->dateTimeFilter is \Magento\Framework\Stdlib\DateTime\Filter\DateTime
protected function _filterPostData($data)
{
    $inputFilter = new \Zend_Filter_Input(
            ['my_date_field' => $this->dateTimeFilter],
            [],
            $data
    );
    $data = $inputFilter->getUnescaped();
    return $data;
}

However, this was working with Date but not the time. It always saved my AEST time as UTC, which is why while doing $block->formatTime($myDate, \IntlDateFormatter::MEDIUM) gave me wrong time, ie. 10+ hours.

I am sure I am still missing something here. Would love to know more on this.

Although, for time being, I am able to save it like this:

$this->_timeZone->convertConfigTimeToUtc($object->getMyDateField(), 'm/d/Y h:i:s a');

I was missing 'm/d/Y h:i:s a' part, while I posted my qst.

Related Topic