Skip to content

Commit 6089992

Browse files
author
Bohdan Korablov
committed
MAGETWO-94196: [2.1] The fix of incorrect date format was lost since 2.1.13
1 parent ecc1eec commit 6089992

File tree

4 files changed

+26
-23
lines changed

4 files changed

+26
-23
lines changed

app/code/Magento/Catalog/Model/Product/Option/Type/Date.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public function prepareForCart()
142142

143143
if ($this->_dateExists()) {
144144
if ($this->useCalendar()) {
145-
$timestamp += $this->_localeDate->date($value['date'], null, true)->getTimestamp();
145+
$timestamp += $this->_localeDate->date($value['date'], null, true, false)->getTimestamp();
146146
} else {
147147
$timestamp += mktime(0, 0, 0, $value['month'], $value['day'], $value['year']);
148148
}

lib/internal/Magento/Framework/Stdlib/DateTime/Timezone.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ public function getDateTimeFormat($type)
153153
* {@inheritdoc}
154154
* @SuppressWarnings(PHPMD.NPathComplexity)
155155
*/
156-
public function date($date = null, $locale = null, $useTimezone = true)
156+
public function date($date = null, $locale = null, $useTimezone = true, $includeTime = true)
157157
{
158158
$locale = $locale ?: $this->_localeResolver->getLocale();
159159
$timezone = $useTimezone
@@ -165,10 +165,12 @@ public function date($date = null, $locale = null, $useTimezone = true)
165165
} elseif ($date instanceof \DateTime) {
166166
return $date->setTimezone(new \DateTimeZone($timezone));
167167
} elseif (!is_numeric($date)) {
168+
$timeType = $includeTime ? \IntlDateFormatter::SHORT : \IntlDateFormatter::NONE;
168169
$formatter = new \IntlDateFormatter(
169170
$locale,
170171
\IntlDateFormatter::SHORT,
171-
\IntlDateFormatter::NONE
172+
$timeType,
173+
new \DateTimeZone($timezone)
172174
);
173175
$date = $formatter->parse($date) ?: (new \DateTime($date))->getTimestamp();
174176
}
@@ -245,8 +247,8 @@ public function isScopeDateInInterval($scope, $dateFrom = null, $dateTo = null)
245247
* @param string|\DateTimeInterface $date
246248
* @param int $dateType
247249
* @param int $timeType
248-
* @param string|null $locale
249-
* @param string|null $timezone
250+
* @param null $locale
251+
* @param null $timezone
250252
* @param string|null $pattern
251253
* @return string
252254
*/

lib/internal/Magento/Framework/Stdlib/DateTime/TimezoneInterface.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,10 @@ public function getDateTimeFormat($type);
6565
* @param mixed $date
6666
* @param string $locale
6767
* @param bool $useTimezone
68+
* @param bool $includeTime
6869
* @return \DateTime
6970
*/
70-
public function date($date = null, $locale = null, $useTimezone = true);
71+
public function date($date = null, $locale = null, $useTimezone = true, $includeTime = true);
7172

7273
/**
7374
* Create \DateTime object with date converted to scope timezone and scope Locale
@@ -125,8 +126,8 @@ public function isScopeDateInInterval($scope, $dateFrom = null, $dateTo = null);
125126
* @param string|\DateTimeInterface $date
126127
* @param int $dateType
127128
* @param int $timeType
128-
* @param string|null $locale
129-
* @param string|null $timezone
129+
* @param null $locale
130+
* @param null $timezone
130131
* @param string|null $pattern
131132
* @return string
132133
*/

lib/internal/Magento/Framework/Stdlib/Test/Unit/DateTime/TimezoneTest.php

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,40 +32,40 @@ protected function setUp()
3232
}
3333

3434
/**
35-
* Test date parsing with different date format
35+
* Test date parsing with different includeTime options
3636
*
3737
* @param string $date
3838
* @param string $locale
39+
* @param bool $includeTime
3940
* @param int $expectedTimestamp
40-
* @dataProvider dateDataProvider
41+
* @dataProvider dateIncludeTimeDataProvider
4142
*/
42-
public function testDate($date, $locale, $expectedTimestamp)
43+
public function testDateIncludeTime($date, $locale, $includeTime, $expectedTimestamp)
4344
{
4445
$this->scopeConfigMock->method('getValue')->willReturn('America/Chicago');
4546
/** @var Timezone $timezone */
4647
$timezone = $this->objectManager->getObject(Timezone::class, ['scopeConfig' => $this->scopeConfigMock]);
4748

4849
/** @var \DateTime $dateTime */
49-
$date = $timezone->date($date, $locale, true);
50-
$this->assertEquals($expectedTimestamp, $date->getTimestamp());
50+
$dateTime = $timezone->date($date, $locale, true, $includeTime);
51+
$this->assertEquals($expectedTimestamp, $dateTime->getTimestamp());
5152
}
5253

53-
/**
54-
* @return array
55-
*/
56-
public function dateDataProvider()
54+
public function dateIncludeTimeDataProvider()
5755
{
5856
return [
59-
'Parse date with dd/mm/yyyy format' => [
57+
'Parse date without time' => [
6058
'19/05/2017', // date
6159
'ar_KW', // locale
62-
1495177200 // expected timestamp
60+
false, // include time
61+
1495170000 // expected timestamp
6362
],
64-
'Parse date with mm/dd/yyyy format' => [
65-
'05/19/2017', // date
63+
'Parse date with time' => [
64+
'05/19/2017 00:01 am', // date
6665
'en_US', // locale
67-
1495177200 // expected timestamp
68-
]
66+
true, // include time
67+
1495170060 // expected timestamp
68+
],
6969
];
7070
}
7171
}

0 commit comments

Comments
 (0)