アプリ版:「スタンプのみでお礼する」機能のリリースについて

Google Apps Scriptにて、
勤怠管理をしようとしています。

残業時間を算出しようと、
スクリプトで、
終業時間から、稼働時間を引き算しましたが、

#NUM!

とスプレッドシートに表示されてしまいます。

ネットでも調べてみたのですが、
それらしい記述がないので、

どなたか、
同じ事をしたかたがいらっしゃいましたら、

ご教授願えませんでしょうか?

初心者につき、
ご無礼がありましたら、
ごめんなさい。

A 回答 (3件)

>hh:mm形式にするには



得られるのは秒数換算された値です。値を1時間の秒数(60 * 60)で割れば時数が得られます。そのあまりを1分の秒数(60)で割れば分数が得られます。
    • good
    • 4

> if ( a1 >= "20:55" && a1 <= "21:55" ){



この最初の部分で既に変です。テキストと比較していますよ?

"20:55"というテキストと比較しても意味がありません。テキストは、テキストですから。日時の値ではありませんし比較演算子で比較することもできません。

まず、日時と、比較する日時をそれぞれDateオブジェクトとして取得し、そこから経過ミリ秒数を取得して計算をしなくてはいけません。

例えばですが。比較する2つのDateオブジェクトを用意します。

var d1 = new Date();
var d2 = new Date();
d1.setHours(1); // 時を設定
d1.setMinutes(30); // 分を設定
d2.setHours(12); // 時を設定
d2.setMinutes(34); // 分を設定

こんな感じで比較するDateオブジェクトを2つ用意し、

var a = d1.getTime();
var b = d2.getTime();
var d = (b - a) / 1000;

こうしてそれぞれの経過ミリ秒数の値を取得して計算をすれば、時間が得られるでしょう。
このあたりはJavaScriptの日時計算そのままですから、JavaScriptを調べてみるといいでしょう。

この回答への補足

初心者で申し訳ありません。

var a = d1.getTime();
var b = d2.getTime();
var d = (b - a) / 1000;

で得られる、
dを
hh:mm形式にするには

どうしたらいいのでしょうか?

補足日時:2014/07/28 06:51
    • good
    • 0

これだけではなんとも返事のしようがないです。

どうやって計算しているのでしょうか。

セルに日時の値が書かれているなら、それぞれのgetTimeで経過ミリ秒数を取得し、引き算すればいいと思います。例えばですが。

function timeAsubB(a,b){
return (a.getTime()-b.getTime()) / 1000;
}

例えばこんな感じでスクリプトを用意しておき、セルに、

timeAsubB(A1, A2)

こんな具合に設定すれば、A1とA2の日時の差を秒数換算した値が表示されます。そういうことでしょうか?

この回答への補足

詳しく、記述します。

if ( a1 >= "20:55" && a1 <= "21:55" ){

 実働時間を稼働時間から、休憩時間を引いて求めています
var jitdo = (kado - st.getRange(6,2).getValue()) / (1000*60*60*24);

 シートに定時時間を設定します
sheet.getRange(i,5).setValue("8:00");

 稼働時間から、実働時間を引いて、残業時間を求めています 
var y = ( a1 - jitdo );

 シートに設定すると、#NUM! と表示されます
sheet.getRange(i,6).setValue(y); // 残業時間


以上ですが、
お分かりになりますでしょうか?

よろしくお願いします

補足日時:2014/07/27 20:18
    • good
    • 0

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