Exemplo n.º 1
0
 /**
  * Create a new instance of a number of weeks
  * 
  * @param float $aNumber
  * @return object Duration
  * @access public
  * @since 5/13/05
  * @static
  */
 static function withWeeks($aNumber)
 {
     $obj = Duration::withDaysHoursMinutesSeconds($aNumber * 7, 0, 0, 0);
     return $obj;
 }
Exemplo n.º 2
0
 /**
  * Test converting methods
  * 
  */
 function test_converting()
 {
     $time = Time::withHourMinuteSecond(15, 25, 10);
     // asDate ()
     $temp = $time->asDate();
     $this->assertTrue($temp->isEqualTo(Date::today()));
     $this->assertEqual(strtolower(get_class($temp)), 'date');
     // asDateAndTime ()
     $temp = $time->asDateAndTime();
     $comparison = DateAndTime::midnight();
     $comparison = $comparison->plus(Duration::withSeconds(55510));
     $this->assertTrue($temp->isEqualTo($comparison));
     $this->assertEqual(strtolower(get_class($temp)), 'dateandtime');
     // asDuration ()
     $temp = $time->asDuration();
     $this->assertTrue($temp->isEqualTo(Duration::withSeconds(55510)));
     $this->assertEqual(strtolower(get_class($temp)), 'duration');
     // asMonth ()
     $temp = $time->asMonth();
     $this->assertTrue($temp->isEqualTo(Month::starting(Date::today())));
     $this->assertEqual(strtolower(get_class($temp)), 'month');
     // asSeconds ()
     $this->assertEqual($time->asSeconds(), 55510);
     // asTime ()
     $temp = $time->asTime();
     $this->assertTrue($temp->isEqualTo($time));
     $this->assertEqual(strtolower(get_class($temp)), 'time');
     // asTimeStamp ()
     $temp = $time->asTimeStamp();
     $comparison = TimeStamp::midnight();
     $comparison = $comparison->plus(Duration::withSeconds(55510));
     $this->assertTrue($temp->isEqualTo($comparison));
     $this->assertEqual(strtolower(get_class($temp)), 'timestamp');
     // asWeek ()
     $temp = $time->asWeek();
     $this->assertTrue($temp->isEqualTo(Week::starting(Date::today())));
     $this->assertEqual(strtolower(get_class($temp)), 'week');
     // asYear ()
     $temp = $time->asYear();
     $this->assertTrue($temp->isEqualTo(Year::starting(Date::today())));
     $this->assertEqual(strtolower(get_class($temp)), 'year');
     // to ()
     $today = DateAndTime::today();
     $tomorrow = DateAndTime::tomorrow();
     $result = $time->to($tomorrow);
     $this->assertEqual(strtolower(get_class($result)), 'timespan');
     $this->assertTrue($result->isEqualTo(Timespan::startingDuration($today->plus(Duration::withSeconds(55510)), Duration::withDaysHoursMinutesSeconds(0, 8, 34, 50))));
     $result = $time->to(Time::withHourMinuteSecond(23, 25, 10));
     $this->assertEqual(strtolower(get_class($result)), 'timespan');
     $this->assertTrue($result->isEqualTo(Timespan::startingDuration($today->plus(Duration::withSeconds(55510)), Duration::withDaysHoursMinutesSeconds(0, 8, 0, 0))));
 }
Exemplo n.º 3
0
 /**
  * Create a new instance.
  * 
  * @param integer $anIntYear
  * @param integer $anIntOrStringMonth
  * @param integer $anIntDay
  * @param integer $anIntHour
  * @param integer $anIntMinute
  * @param integer $anIntSecond
  * @param object Duration $aDurationOffset
  * @param optional string $class DO NOT USE OUTSIDE OF PACKAGE.
  *		This parameter is used to get around the limitations of not being
  *		able to find the class of the object that recieved the initial 
  *		method call.
  * @return object DateAndTime
  * @access public
  * @static
  * @since 5/4/05
  */
 static function withYearMonthDayHourMinuteSecondOffset($anIntYear, $anIntOrStringMonth, $anIntDay, $anIntHour, $anIntMinute, $anIntSecond, $aDurationOffset, $class = 'DateAndTime')
 {
     // Validate our passed class name.
     if (!(strtolower($class) == strtolower('DateAndTime') || is_subclass_of(new $class(), 'DateAndTime'))) {
         die("Class, '{$class}', is not a subclass of 'DateAndTime'.");
     }
     // Ensure that we have no days less than 1.
     if ($anIntDay < 1) {
         $anIntDay = 1;
     }
     if (is_numeric($anIntOrStringMonth)) {
         $monthIndex = $anIntOrStringMonth;
     } else {
         $monthIndex = Month::indexOfMonth($anIntOrStringMonth);
     }
     $p = intval(($monthIndex - 14) / 12);
     $q = $anIntYear + 4800 + $p;
     $r = $monthIndex - 2 - 12 * $p;
     $s = intval(($anIntYear + 4900 + $p) / 100);
     $julianDayNumber = intval(1461 * $q / 4) + intval(367 * $r / 12) - intval(3 * $s / 4) + ($anIntDay - 32075);
     $since = Duration::withDaysHoursMinutesSeconds($julianDayNumber, $anIntHour, $anIntMinute, $anIntSecond);
     if (is_null($aDurationOffset)) {
         $offset = DateAndTime::localOffset();
     } else {
         $offset = $aDurationOffset;
     }
     $dateAndTime = new $class();
     $dateAndTime->ticksOffset($since->ticks(), $offset);
     return $dateAndTime;
 }
Exemplo n.º 4
0
 /**
  * Test durations that generate seconds larger than 2^32 seconds.
  * This may or may not work on some systems.
  * (32-bit) integers can be up to ~2billion. 
  * This corresponds to ~100 years (36500 days).
  * The system may or may not support going over this limit.
  * The system this was developed on, 
  *
  *		Linux version 2.4.18-14 (bhcompile@stripples.devel.redhat.com) 
  *			(gcc version 3.2 20020903 (Red Hat Linux 8.0 3.2-7)) #1 
  *			Wed Sep 4 13:35:50 EDT 2002
  *
  *		PHP 4.3.2
  *			'./configure' '--with-apxs2=/usr/local/apache2/bin/apxs' 
  *			'--enable-safe-mode' '--with-openssl' '--with-gd' 
  *			'--enable-gd-native-ttf' '--with-jpeg-dir=/usr/lib' 
  *			'--with-png-dir=/usr/lib' '--with-xpm-dir=/usr/lib' 
  *			'--with-ttf=/usr/lib' '--with-t1lib=/usr/lib' '--with-ldap' 
  *			'--with-mysql' '--with-pdflib' '--with-zlib-dir=/usr/lib' 
  *			'--with-gettext' '--with-xml' '--with-pgsql=/usr' 
  *			'--with-java=/usr/java' '--with-iconv=/usr/local/lib' '--with-dom'
  *
  * supports the following tests.
  */
 function test_big_durations()
 {
     // 50 years (18250 days)
     $duration = Duration::withDays(18250);
     $this->assertEqual($duration->days(), 18250);
     $this->assertEqual($duration->hours(), 0);
     $this->assertEqual($duration->minutes(), 0);
     $this->assertEqual($duration->seconds(), 0);
     $this->assertEqual($duration->asSeconds(), 86400 * 18250);
     $this->assertEqual($duration->asSeconds(), 1576800000);
     // 100 years (36500 days)
     $duration = Duration::withDays(36500);
     $this->assertEqual($duration->days(), 36500);
     $this->assertEqual($duration->hours(), 0);
     $this->assertEqual($duration->minutes(), 0);
     $this->assertEqual($duration->seconds(), 0);
     $this->assertEqual($duration->asSeconds(), 86400 * 36500);
     $this->assertEqual($duration->asSeconds(), 3153600000);
     // 500 years (182500 days)
     $duration = Duration::withDays(182500);
     $this->assertEqual($duration->days(), 182500);
     $this->assertEqual($duration->hours(), 0);
     $this->assertEqual($duration->minutes(), 0);
     $this->assertEqual($duration->seconds(), 0);
     $this->assertEqual($duration->asSeconds(), 86400 * 182500);
     $this->assertEqual($duration->asSeconds(), 15768000000);
     // 5000 years (1825000 days)
     $duration = Duration::withDays(1825000);
     $this->assertEqual($duration->days(), 1825000);
     $this->assertEqual($duration->hours(), 0);
     $this->assertEqual($duration->minutes(), 0);
     $this->assertEqual($duration->seconds(), 0);
     $this->assertEqual($duration->asSeconds(), 86400 * 1825000);
     $this->assertEqual($duration->asSeconds(), 157680000000);
     // 5000 years (1825000 days)
     // minus 500 years (182500 days)
     // should equal 4500 years (1642500 days)
     $duration = Duration::withDays(1825000);
     $result = $duration->minus(Duration::withDays(182500));
     $this->assertEqual($result->days(), 1642500);
     $this->assertEqual($result->hours(), 0);
     $this->assertEqual($result->minutes(), 0);
     $this->assertEqual($duration->seconds(), 0);
     $this->assertEqual($result->asSeconds(), 86400 * 1642500);
     $this->assertEqual($result->asSeconds(), 141912000000);
     // 500,000,000 years (182500000000 days)
     // minus 500 years (182500 days)
     // should equal 499,999,500 years (182481750000 days)
     $duration = Duration::withDays(182500000000);
     $result = $duration->minus(Duration::withDays(182500));
     $this->assertEqual($result->days(), 182499817500);
     $this->assertEqual($result->hours(), 0);
     $this->assertEqual($result->minutes(), 0);
     $this->assertEqual($duration->seconds(), 0);
     $this->assertEqual($result->asSeconds(), 86400 * 182499817500);
     $this->assertEqual($result->asSeconds(), hexdec('3804e5eaf8ea00'));
     // 50,000,000,000 years (18250000000000 days)
     // minus 500 years (182500 days)
     // should equal 49,999,999,500 years (18249999817500 days)
     $duration = Duration::withDays(18250000000000);
     $result = $duration->minus(Duration::withDays(182500));
     $this->assertEqual($result->days(), 18249999817500);
     $this->assertEqual($result->hours(), 0);
     $this->assertEqual($result->minutes(), 0);
     $this->assertEqual($duration->seconds(), 0);
     $this->assertEqual($result->asSeconds(), 86400 * 18249999817500);
     $this->assertEqual($result->asSeconds(), hexdec('15e1eb3b3dfd6a00'));
     // Beyond negative 4 billion years, the precision drops from
     // second precision to hour precision.
     // 4,000,000,000 years (1460000000000 days)
     $duration = Duration::withDaysHoursMinutesSeconds(1460000000000, 2, 23, 12);
     $this->assertEqual($duration->days(), 1460000000000);
     $this->assertEqual($duration->hours(), 2);
     $this->assertEqual($duration->minutes(), 23);
     $this->assertEqual($duration->seconds(), 12);
     // 50,000,000,000 years (18250000000000 days)
     $duration = Duration::withDaysHoursMinutesSeconds(18250000000000, 2, 23, 12);
     $this->assertEqual($duration->days(), 18250000000000);
     $this->assertEqual($duration->hours(), 2);
     // 		$this->assertEqual($duration->minutes(), 23);
     // 		$this->assertEqual($duration->seconds(), 12);
 }