-1

誰かがここで私を助けてくれることを願っています.JSについてあまり手がかりがないので、目の前の仕事は不釣り合いに大きくなっています.

3 つのフィールドを持つ html フォームがあります。そのうちの 2 つは時間 (11:00、17:00、23:45 など) で、1 つは単純な数字です。

私は方法を見つけようとしてきました

  1. 2 つの時間 (11:00 - 13:00) の差を取得します。
  2. それを小数に変換します(2、2.5、2.25などの非常に多くの時間)
  3. 3 番目の変数 (17*2.5) を掛けます。

貢献、提案、リンクは大歓迎です。

チョンゴル

4

2 に答える 2

1

時刻が指定された形式の場合、次を使用して差を分単位で取得できます。

function diffMins(t0, t1) {
  t0 = t0.split(':');
  t1 = t1.split(':');
  return t1[0]*60 + +t1[1] - t0[0]*60 - +t0[1]
}

これは、次を使用して 10 進数の時間に変換できます。

function minsToHours(mins) {
  return (mins/60).toFixed(2);
}

alert(minsToHours(diffMins('17:00', '23:45')));  // 6.75

Date オブジェクトの 10 進数の時間の差を取得する場合は、次のようにします。

function dateDiffInHours(d0, d1) {
  return ((d1 - d0) / 3.6e6).toFixed(2)
} 

alert( dateDiffInHours( new Date(2012,07,02,17), new Date(2012,07,02,23,45))); // 6.75 

文字列を Date オブジェクトに渡すことはお勧めできません。ほとんどのブラウザーは 1 つまたは 2 つの形式を解析しますが、解析しないブラウザーもあります。ESCMA-262 ed 3 で指定された標準形式はありません。日付文字列の解析は完全に実装に依存します。ES5 は ISO8601 拡張フォーマット (例: 2012-07-02T23:45:00Z) の修正を指定していますが、使用されているブラウザーのかなりの割合がそれをサポートしていません。

そのため、常に自分で文字列を解析するか、ECMAScript 仕様に従って引数を使用してコンストラクターを呼び出してください。

于 2012-07-06T12:23:52.580 に答える
1

時間を計算するには、新しい Date オブジェクトを作成し、減算で setTime() を呼び出す必要があります。

var dt = new Date('8/24/2009 11:00:00');
var newHour = dt.getHours() + 2;
dt.setTime(newHour, 0, 0, 0);

また

var dt1 = new Date('8/24/2009 11:00:00');
var dt2 = new Date('8/24/2009 13:00:00');

var h1 = dt1.getHours();
var h2 = dt2.getHours();

var h = dt2.getHours() - dt1.getHours();

分を 10 進数に変換するには、60 で割るだけです。

var dt1 = new Date('8/24/2009 11:20:00');
var h = dt1.getHours();
var m = dt1.getMinutes();

h + (m/60) = 8.33

したがって、基本的には、実際の Date オブジェクトから始めて、getHours() や getMinutes() などの組み込みメソッドを使用して、数学/変換を行います。本物の Date オブジェクトがあれば、簡単にできるはずです。

于 2012-07-06T11:50:15.470 に答える