You are here

class TimeSpan in Drupal 10

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/TypedData/Plugin/DataType/TimeSpan.php \Drupal\Core\TypedData\Plugin\DataType\TimeSpan
  2. 9 core/lib/Drupal/Core/TypedData/Plugin/DataType/TimeSpan.php \Drupal\Core\TypedData\Plugin\DataType\TimeSpan

The time span data type represents durations as number of seconds.

The plain value is the (integer) number of seconds. Note that time spans only map correctly to durations as long as the number of seconds does not exceed a day (there is already a difference in applying a duration of a day or 24 hours due to daylight savings). If that's an issue, consider using \Drupal\Core\TypedData\Type\DurationIso8601 instead.

Plugin annotation


@DataType(
  id = "timespan",
  label = @Translation("Time span in seconds")
)

Hierarchy

  • class \Drupal\Core\TypedData\Plugin\DataType\TimeSpan extends \Drupal\Core\TypedData\Plugin\DataType\IntegerData implements \Drupal\Core\TypedData\Type\DurationInterface

Expanded class hierarchy of TimeSpan

See also

\Drupal\Core\TypedData\Type\DurationIso8601

File

core/lib/Drupal/Core/TypedData/Plugin/DataType/TimeSpan.php, line 23

Namespace

Drupal\Core\TypedData\Plugin\DataType
View source
class TimeSpan extends IntegerData implements DurationInterface {

  /**
   * {@inheritdoc}
   */
  public function getDuration() {
    if ($this->value) {

      // Keep the duration in seconds as there is generally no valid way to
      // convert it to days, months or years.
      return new \DateInterval('PT' . $this->value . 'S');
    }
  }

  /**
   * {@inheritdoc}
   */
  public function setDuration(\DateInterval $duration, $notify = TRUE) {

    // Note that this applies the assumption of 12 month's a 30 days and
    // each year having 365 days. There is no accurate conversion for time spans
    // exceeding a day.
    $this->value = $duration->y * 365 * 24 * 60 * 60 + $duration->m * 30 * 24 * 60 * 60 + $duration->d * 24 * 60 * 60 + $duration->h * 60 * 60 + $duration->i * 60 + $duration->s;

    // Notify the parent of any changes.
    if ($notify && isset($this->parent)) {
      $this->parent
        ->onChange($this->name);
    }
  }

}

Members