Skip to content

Commit 980f077

Browse files
ENGCOM-5634: Resolve Timezone scopeDate method isn't implemented fully #23693
- Merge Pull Request #23693 from edenduong/magento2:2.3-bugfix/scope_date_implement_missing_issue23359 - Merged commits: 1. 4b7f8e5
2 parents bdcaeaf + 4b7f8e5 commit 980f077

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

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

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,11 +196,36 @@ public function date($date = null, $locale = null, $useTimezone = true, $include
196196
public function scopeDate($scope = null, $date = null, $includeTime = false)
197197
{
198198
$timezone = $this->_scopeConfig->getValue($this->getDefaultTimezonePath(), $this->_scopeType, $scope);
199-
$date = new \DateTime(is_numeric($date) ? '@' . $date : $date);
200-
$date->setTimezone(new \DateTimeZone($timezone));
199+
switch (true) {
200+
case (empty($date)):
201+
$date = new \DateTime('now', new \DateTimeZone($timezone));
202+
break;
203+
case ($date instanceof \DateTime):
204+
$date = $date->setTimezone(new \DateTimeZone($timezone));
205+
break;
206+
case ($date instanceof \DateTimeImmutable):
207+
$date = new \DateTime($date->format('Y-m-d H:i:s'), $date->getTimezone());
208+
break;
209+
case (!is_numeric($date)):
210+
$timeType = $includeTime ? \IntlDateFormatter::SHORT : \IntlDateFormatter::NONE;
211+
$formatter = new \IntlDateFormatter(
212+
$this->_localeResolver->getLocale(),
213+
\IntlDateFormatter::SHORT,
214+
$timeType,
215+
new \DateTimeZone($timezone)
216+
);
217+
$date = $formatter->parse($date) ?: (new \DateTime($date))->getTimestamp();
218+
$date = (new \DateTime(null, new \DateTimeZone($timezone)))->setTimestamp($date);
219+
break;
220+
default:
221+
$date = new \DateTime(is_numeric($date) ? '@' . $date : $date);
222+
$date->setTimezone(new \DateTimeZone($timezone));
223+
}
224+
201225
if (!$includeTime) {
202226
$date->setTime(0, 0, 0);
203227
}
228+
204229
return $date;
205230
}
206231

0 commit comments

Comments
 (0)