質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

4回答

2571閲覧

テキストフォームに入力された時間同士の計算の仕方

kadaj1613

総合スコア18

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2016/05/25 03:46

###前提・実現したいこと
テキストフォームに入力された時刻同士で稼動時間の計算をしたいです。
開始時間・終了時間・休憩時間の3つのテキストフォームがあります。
計算式は開始時間が12:00、終了時間が16:00、休憩時間が00:30と入力された場合
16:00 - 12:00 - 00:30と計算し、稼働時間が03:30になるように求めます。

入力される内容が全角or半角で
hh:mm
と入力(時間と分)され、3つのテキストフォーム全てが入力された場合のみ計算させたいです。

例えば休憩時間を入力した段階で、開始と終了時間が入力されていたら、テキストフォームから
フォーカスが外れた時に計算させたいです。

計算後の処理もありますが、そこは自身でどうすれば良いかわかるので計算させる方法を教えていただきたいです。

###試したこと
jQUeryに入力文字を判定する関数を定義したり、文字列の中から「:」を削除して引き算をさせてみたり、他には、そもそも入力を全角or半角で「hh:mm」以外を受け付けないようにするなど色々考えましたが、どの方法も正しく動作しないです。
どうしたらいいかまったくわからない状態です。

###補足情報(言語/FW/ツール等のバージョンなど)
[CakePHP 2.4.10]
[jQuery 2.1]です。
※他にも記述すべき情報がありましたら、ご指摘いただけますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

投稿2016/05/25 03:53

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

正規表現は使えますか?
以下で全角半角に対応して24時間制時刻表示にマッチします。
match() の戻り値が null であれば、時刻でない、時刻であれば時間、分をそれぞれ格納した配列が戻ります。

([0-90-9]|[11][0-90-9]|[22][0-30-3])::

投稿2016/06/22 02:42

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

されたいことが3つあるようです?

1.

稼動時間の計算をしたいです。

時間数の計算は、通算秒または通算分にしてしまうのが楽だと思います
「開始時間が12:00、終了時間が16:00、休憩時間が00:30」
通算分で考えれば (1660) - (1260) - 30 = 210 分
210 / 60 = 3 時間
210 % 60 = 30 分
という感じ

2.

全てが入力された場合のみ計算させたいです。

<input>の中身が全て埋まっている(lengthが0ではない)
・時間として正しく解釈できる書式で入力されている
以上を満たしていれば1.の計算を行います

「時間として正しく解釈できる書式」をどう考えるかですが、例として
・数字と:(コロン)以外の文字は無いこと
・:(コロン)の前後に必ず入力があること
・前の数字の範囲は 0 ~ 23
・後ろの数字の範囲は 0 ~ 59
などなど

また
・全角入力も認める
・時間の逆転は認めない
といったルール決めと対処
・休憩時間が就業規則上の時間より長いかどうか
・開始時間-終了時間 ≦ 休憩時間 (全部休憩!?)
といったチェックも必要そうでしょうか

3.

フォーカスが外れた時に計算させたいです。

onblurを使うことで「フォーカスが外れたときに処理実行」が実現できます
たとえば
<input type="text" onblur="doCalc()">
としておけば、入力ボックスからフォーカスが離れたときにdoCalc関数が呼び出されます

jQueryで書くなら
$("input").blur( function () { 処理 } );
という方法も

投稿2016/05/25 05:51

takito

総合スコア3111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kadaj1613

2016/05/25 06:03

ご回答ありがとうございます。 「時間として正しく解釈できる書式」ですが、以下内容でお願いします。 ・数字と:(コロン)以外の文字は無いこと ・:(コロン)の前後に必ず入力があること ・前の数字の範囲は 0 ~ 23 ・後ろの数字の範囲は 0 ~ 59 ・全角入力も認める ・時間の逆転も認める (例えば、開始時間23:00、終了時間08:00、休憩時間01:00などでも認めます。 ※日付の入力は無いのですが、上記入力でも稼働時間が08:00と出したいです。) 以下内容のチェックは必要ないです。 ・休憩時間が就業規則上の時間より長いかどうか ・開始時間-終了時間 ≦ 休憩時間 (全部休憩!?) 宜しくお願いいたします。
takito

2016/05/27 02:04

何をすればよいかは見えてきたでしょうか あとはコードにしてみましょう うまくいかないところが出たら、別の質問でそのコードを投稿すれば具体的なアドバイスがもらえると思います
guest

0

入力部分ですが<select>を使用して時/分の2つの値を選択してもらう方式にしてしまえばテキスト入力での全角半角や「:」の処理を考えなくてもいいのではないかと思います。

投稿2016/05/25 04:03

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kadaj1613

2016/05/25 04:16

ご回答ありがとうございます。 すみません。 その方法もあるかと思いますが、テキスト入力という方法は変えずに実現したいのです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問