You are here

public function DateObject::merge in Date 7.3

Same name and namespace in other branches
  1. 7 date_api/date_api.module \DateObject::merge()
  2. 7.2 date_api/date_api.module \DateObject::merge()

Merges two date objects together using the current date values as defaults.

Parameters

DateObject $other: Another date object to merge with.

Return value

DateObject A merged date object.

File

date_api/date_api.module, line 330
This module will make the date API available to other modules.

Class

DateObject
Extend PHP DateTime class.

Code

public function merge(DateObject $other) {
  $other_tz = $other
    ->getTimezone();
  $this_tz = $this
    ->getTimezone();

  // Figure out which timezone to use for combination.
  $use_tz = $this
    ->hasGranularity('timezone') || !$other
    ->hasGranularity('timezone') ? $this_tz : $other_tz;
  $this2 = clone $this;
  $this2
    ->setTimezone($use_tz);
  $other
    ->setTimezone($use_tz);
  $val = $this2
    ->toArray(TRUE);
  $otherval = $other
    ->toArray();
  foreach (self::$allgranularity as $g) {
    if ($other
      ->hasGranularity($g) && !$this2
      ->hasGranularity($g)) {

      // The other class has a property we don't; steal it.
      $this2
        ->addGranularity($g);
      $val[$g] = $otherval[$g];
    }
  }
  $other
    ->setTimezone($other_tz);
  $this2
    ->setDate($val['year'], $val['month'], $val['day']);
  $this2
    ->setTime($val['hour'], $val['minute'], $val['second']);
  return $this2;
}