public function testSub() { $d1 = new Duration('PT2S'); $d2 = new Duration('PT1S'); $d1->sub($d2); $this->assertEquals('PT1S', $d1->__toString()); $d1 = new Duration('PT2S'); $d2 = new Duration('PT4S'); $d1->sub($d2); $this->assertEquals('PT0S', $d1->__toString()); $d1 = new Duration('P1DT2H25M30S'); $d2 = new Duration('P1DT2H'); $d1->sub($d2); $this->assertEquals('PT25M30S', $d1->__toString()); $d1 = new Duration('PT20S'); $d2 = new Duration('PT20S'); $d1->sub($d2); $this->assertEquals('PT0S', $d1->__toString()); $d1 = new Duration('PT20S'); $d2 = new Duration('PT21S'); $d1->sub($d2); $this->assertTrue($d1->isNegative()); }
/** * Write a Duration in the current binary stream. * * @param Duration $duration A Duration object. * @throws QtiBinaryStreamAccessException */ public function writeDuration(Duration $duration) { try { $this->writeString($duration->__toString()); } catch (BinaryStreamAccessException $e) { $msg = "An error occured while writing a duration."; throw new QtiBinaryStreamAccessException($msg, $this, QtiBinaryStreamAccessException::DURATION, $e); } }
/** * Subtract a duration to this one. If $duration is greather than or equal to * the current duration, a duration of 0 seconds is returned. * * For instance P2S - P1S = P1S */ public function sub(Duration $duration) { if ($duration->longerThanOrEquals($this) === true) { $this->setInterval(new DateInterval('PT0S')); } else { $refStrDate = '@0'; $tz = new DateTimeZone(self::TIMEZONE); $d1 = new DateTime($refStrDate, $tz); $d2 = new DateTime($refStrDate, $tz); $d1->add(new DateInterval($this->__toString())); $d2->add(new DateInterval($duration->__toString())); $interval = $d1->diff($d2); $this->setInterval($interval); } }
/** * Marshall a QTI duration datatype into its PCI JSON Representation. * * @param \qtism\common\datatypes\Duration $duration * @return array */ protected function marshallDuration(Duration $duration) { return array('base' => array('duration' => $duration->__toString())); }