public static function Dtf2d($scale, $iy, $im, $id, $ihr, $imn, $sec, &$d1,
          &$d2) {

    $js;
    $iy2;
    $im2;
    $id2;
    $dj;
    $w;
    $day;
    $seclim;
    $dat0;
    $dat12;
    $dat24;
    $dleap;
    $time;

    /* Today's Julian Day Number. */
    $js = IAU::Cal2jd($iy, $im, $id, $dj, $w);
    if ($js)
      return $js;
    $dj += $w;

    /* Day length and final minute length in seconds (provisional). */
    $day    = DAYSEC;
    $seclim = 60.0;

    /* Deal with the UTC leap second case. */
    if (!strcmp($scale, "UTC")) {

      /* TAI-UTC at 0h today. */
      $js = IAU::Dat($iy, $im, $id, 0.0, $dat0);
      if ($js < 0)
        return $js;

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

      /* TAI-UTC at 0h tomorrow (to detect jumps). */
      $js = IAU::Jd2cal($dj, 1.5, $iy2, $im2, $id2, $w);
      if ($js)
        return js;
      $js = IAU::Dat($iy2, $im2, $id2, 0.0, $dat24);
      if ($js < 0)
        return $js;

      /* Any sudden change in TAI-UTC between today and tomorrow. */
      $dleap = $dat24 - (2.0 * $dat12 - $dat0);

      /* If leap second day, correct the day and final minute lengths. */
      $day += $dleap;
      if ($ihr == 23 && $imn == 59)
        $seclim += $dleap;

      /* End of UTC-specific actions. */
    }

    /* Validate the time. */
    if ($ihr >= 0 && $ihr <= 23) {
      if ($imn >= 0 && $imn <= 59) {
        if ($sec >= 0) {
          if ($sec >= $seclim) {
            $js += 2;
          }
        }
        else {
          $js = -6;
        }
      }
      else {
        $js = -5;
      }
    }
    else {
      $js = -4;
    }
    if ($js < 0)
      return $js;

    /* The time in days. */
    $time = ( 60.0 * ( (double)( 60 * $ihr + $imn ) ) + $sec ) / $day;

    /* Return the date and time. */
    $d1 = $dj;
    $d2 = $time;

    /* Status. */
    return $js;
  }