Example #1
0
 /**
  * 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(QtiDuration $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);
     }
 }
Example #2
0
 public function testSub()
 {
     $d1 = new QtiDuration('PT2S');
     $d2 = new QtiDuration('PT1S');
     $d1->sub($d2);
     $this->assertEquals('PT1S', $d1->__toString());
     $d1 = new QtiDuration('PT2S');
     $d2 = new QtiDuration('PT4S');
     $d1->sub($d2);
     $this->assertEquals('PT0S', $d1->__toString());
     $d1 = new QtiDuration('P1DT2H25M30S');
     $d2 = new QtiDuration('P1DT2H');
     $d1->sub($d2);
     $this->assertEquals('PT25M30S', $d1->__toString());
     $d1 = new QtiDuration('PT20S');
     $d2 = new QtiDuration('PT20S');
     $d1->sub($d2);
     $this->assertEquals('PT0S', $d1->__toString());
     $d1 = new QtiDuration('PT20S');
     $d2 = new QtiDuration('PT21S');
     $d1->sub($d2);
     $this->assertTrue($d1->isNegative());
 }
Example #3
0
 /**
  * Marshall a QTI duration datatype into its PCI JSON Representation.
  *
  * @param \qtism\common\datatypes\Duration $duration
  * @return array
  */
 protected function marshallDuration(QtiDuration $duration)
 {
     return array('base' => array('duration' => $duration->__toString()));
 }
 /**
  * Write a Duration in the current binary stream.
  *
  * @param \qtism\common\datatypes\Duration $duration A Duration object.
  * @throws \qtism\runtime\storage\binary\QtiBinaryStreamAccessException
  */
 public function writeDuration(QtiDuration $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);
     }
 }