function Datelist::incrementRound

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Datetime/Element/Datelist.php \Drupal\Core\Datetime\Element\Datelist::incrementRound()
  2. 8.9.x core/lib/Drupal/Core/Datetime/Element/Datelist.php \Drupal\Core\Datetime\Element\Datelist::incrementRound()
  3. 10 core/lib/Drupal/Core/Datetime/Element/Datelist.php \Drupal\Core\Datetime\Element\Datelist::incrementRound()

Rounds minutes and seconds to nearest requested value.

Parameters

$date: The date.

$increment: The value to round to.

Return value

\Drupal\Core\Datetime\DrupalDateTime

1 call to Datelist::incrementRound()
Datelist::valueCallback in core/lib/Drupal/Core/Datetime/Element/Datelist.php
Validates the date type to adjust 12 hour time and prevent invalid dates. If the date is valid, the date is set in the form.

File

core/lib/Drupal/Core/Datetime/Element/Datelist.php, line 363

Class

Datelist
Provides a datelist element.

Namespace

Drupal\Core\Datetime\Element

Code

protected static function incrementRound(&$date, $increment) {
    // Round minutes and seconds, if necessary.
    if ($date instanceof DrupalDateTime && $increment > 1) {
        $day = intval($date->format('j'));
        $hour = intval($date->format('H'));
        $second = intval(round(intval($date->format('s')) / $increment) * $increment);
        $minute = intval($date->format('i'));
        if ($second == 60) {
            $minute += 1;
            $second = 0;
        }
        $minute = intval(round($minute / $increment) * $increment);
        if ($minute == 60) {
            $hour += 1;
            $minute = 0;
        }
        $date->setTime($hour, $minute, $second);
        if ($hour == 24) {
            $day += 1;
            $year = $date->format('Y');
            $month = $date->format('n');
            $date->setDate($year, $month, $day);
        }
    }
    return $date;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.