public static function Utctai($utc1, $utc2, &$tai1, &$tai2) {
    $big1;
    $iy;
    $im;
    $id;
    $j;
    $iyt;
    $imt;
    $idt;
    $u1;
    $u2;
    $fd;
    $dat0;
    $dat12;
    $w;
    $dat24;
    $dlod;
    $dleap;
    $z1;
    $z2;
    $a2;

    /* Put the two parts of the UTC into big-first order. */
    $big1 = ( $utc1 >= $utc2 );
    if ($big1) {
      $u1 = $utc1;
      $u2 = $utc2;
    }
    else {
      $u1 = $utc2;
      $u2 = $utc1;
    }

    /* Get TAI-UTC at 0h today. */
    $j = IAU::Jd2cal($u1, $u2, $iy, $im, $id, $fd);
    if ($j !=0 )
      return j;
    $j = IAU::Dat($iy, $im, $id, 0.0, $dat0);
    if ($j < 0)
      return $j;

    /* Get TAI-UTC at 12h today (to detect drift). */
    $j = IAU::Dat($iy, $im, $id, 0.5, $dat12);
    if ($j < 0)
      return $j;

    /* Get TAI-UTC at 0h tomorrow (to detect jumps). */
    $j = IAU::Jd2cal($u1 + 1.5, $u2 - $fd, $iyt, $imt, $idt, $w);
    if ($j!=0)
      return $j;
    $j = IAU::Dat($iyt, $imt, $idt, 0.0, $dat24);
    if ($j < 0)
      return $j;

    /* Separate TAI-UTC change into per-day (DLOD) and any jump (DLEAP). */
    $dlod  = 2.0 * ($dat12 - $dat0);
    $dleap = $dat24 - ($dat0 + $dlod);

    /* Remove any scaling applied to spread leap into preceding day. */
    $fd *= (DAYSEC + $dleap) / DAYSEC;

    /* Scale from (pre-1972) UTC seconds to SI seconds. */
    $fd *= (DAYSEC + $dlod) / DAYSEC;

    /* Today's calendar date to 2-part JD. */
    if (IAU::Cal2jd($iy, $im, $id, $z1, $z2))
      return -1;

    /* Assemble the TAI result, preserving the UTC split and order. */
    $a2 = $z1 - $u1;
    $a2 += $z2;
    $a2 += $fd + $dat0 / DAYSEC;
    if ($big1) {
      $tai1 = $u1;
      $tai2 = $a2;
    }
    else {
      $tai1 = $a2;
      $tai2 = $u1;
    }

    /* Status. */
    return $j;
  }