Example #1
0
 /**
  * Converts this instance to the Coordinated Universal Time scale (UTC), or
  * if a time zone was set then that timezone
  *
  * @return static
  * @throws Exception Occurs if UTC cannot be computed
  */
 public function toUTC()
 {
     if ($this->timescale == TimeScale::UTC()) {
         // Remove the timezone and set to UTC
         $offset = $this->timezone->offset($this->toJD());
         $this->sub(Time::hours($offset));
         $this->timezone = $this->timezone0 ? $this->timezone0 : TimeZone::UTC();
         return $this;
     }
     // TAI -> UTC
     if ($this->timescale == TimeScale::TAI()) {
         $tai1 = $this->jd;
         $tai2 = $this->dayFrac;
         IAU::Taiutc($tai1, $tai2, $utc1, $utc2);
         $this->jd = $utc1;
         $this->dayFrac = $utc2;
         $this->timescale = TimeScale::UTC();
         return $this;
     }
     // TT -> UTC
     if ($this->timescale == TimeScale::TT()) {
         $tt1 = $this->jd;
         $tt2 = $this->dayFrac;
         IAU::Tttai($tt1, $tt2, $tai1, $tai2);
         IAU::Taiutc($tai1, $tai2, $utc1, $utc2);
         $this->jd = $utc1;
         $this->dayFrac = $utc2;
         $this->timescale = TimeScale::UTC();
         return $this;
     }
     // UT1 -> UTC
     if ($this->timescale == TimeScale::UT1()) {
         $ut11 = $this->jd;
         $ut12 = $this->dayFrac;
         $dut1 = IERS::jd($ut11 + $ut12)->dut1();
         IAU::Ut1utc($ut11, $ut12, $dut1, $utc1, $utc2);
         $this->jd = $utc1;
         $this->dayFrac = $utc2;
         $this->timescale = TimeScale::UTC();
         return $this;
     }
     // TDB -> UTC
     if ($this->timescale == TimeScale::TDB()) {
         $tt1 = $this->jd;
         $tt2 = $this->dayFrac;
         $ut = $this->dayFrac;
         $dtr = IAU::Dtdb($tt1, $tt2, $ut, 0, 0, 0);
         $tdb1 = $this->jd;
         $tdb2 = $this->dayFrac;
         IAU::Tdbtt($tdb1, $tdb2, $dtr, $tt1, $tt2);
         IAU::Tttai($tt1, $tt2, $tai1, $tai2);
         IAU::Taiutc($tai1, $tai2, $utc1, $utc2);
         $this->jd = $utc1;
         $this->dayFrac = $utc2;
         $this->timescale = TimeScale::UTC();
         return $this;
     }
     throw new Exception('Error converting to UTC');
 }