1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| public function getFilters()
{
return array(
new \Twig_SimpleFilter('date_diff', array($this, 'datediffFilter'), array('needs_environment' => true)),
);
}
public function datediffFilter(\Twig_Environment $env, $date, $now = null)
{
// Convert both dates to DateTime instances.
$date = $this->dateFromString($env, $date, false);
$now = $this->dateFromString($env, $now, false);
// Get the difference between the two DateTime objects.
$diff = $date->diff($now);
return $diff;
}
public function dateFromString($env, $date, $timezone)
{
// determine the timezone
if (!$timezone) {
$defaultTimezone = $env->getExtension('core')->getTimezone();
} elseif (!$timezone instanceof DateTimeZone) {
$defaultTimezone = new DateTimeZone($timezone);
} else {
$defaultTimezone = $timezone;
}
// immutable dates
if ($date instanceof DateTimeImmutable) {
return false !== $timezone ? $date->setTimezone($defaultTimezone) : $date;
}
if ($date instanceof DateTime || $date instanceof DateTimeInterface) {
$date = clone $date;
if (false !== $timezone) {
$date->setTimezone($defaultTimezone);
}
return $date;
}
$date = new DateTime($date, $defaultTimezone);
if (false !== $timezone) {
$date->setTimezone($defaultTimezone);
}
return $date;
} |
Partager