dポイントプレゼントキャンペーン実施中!

PERLにて、以下のようなことがしたいと考えています。

$date1="12:00"
$date2="12:45"

$date2 - $date1 = 45(分)

上記の感じで2つの時刻の差分時間を計算したいと考えているのでが、何か良い方法はないでしょうか?

最初は時刻を「(時間×60)+○○分」に変換して引き算すれば良いかと考えていましたが、その場合だと、日をまたぐ(23:00から2:00)みたいな計算が出来るのかな?と思いました。

何か良い方法があればご教授頂ければ幸いです。

それでは、どうぞよろしくお願い致します。

A 回答 (3件)

No.2で貼り付けに失敗して2行切れましたが、定義したtimeDiff()は、こんな感じで使います。


----
printf "$a to $b is %d[min]\n", timeDiff($a,$b);
printf "$c to $d is %d[min]\n", timeDiff($c,$d);
----
出力は、こうなります。
----
12:00 to 12:45 is 45[min]
23:00 to 02:00 is 180[min]
----
    • good
    • 0

こんなんでどうでしょう?


sub toLinear {
my ($timeStr) = @_;
my ($hh,$mm) = split(/:/,$timeStr);
return ($hh * 60 + $mm);
}

sub timeDiff {
my ($from,$to) = @_;
my $MinDays = 24 * 60;
return ((toLinear($to) - toLinear($from) + $MinDays) % $MinDays);
}

$a = "12:00";
$b = "12:45";
$c = "23:00";
$d = "02:00";
    • good
    • 0

sub timeDiffByM($$){


# timeformat "hh:mm"
# timeDiffByM(from, to)
my ($from, $to) = @_;
my ($f_h, $f_m) = split(/:/, $from);
my ($t_h, $t_m) = split(/:/, $to);
my $f = $f_h * 60 + $f_m;
my $t = $t_h * 60 + $t_m;
my $d = $t - $f;
if($d<0){
$d += 24*60;
}
return $d;
}

print timeDiffByM("12:00", "12:45") . "(分)\n";
print timeDiffByM("23:00", "02:00") . "(分)\n";
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!