2012-05-29 6 views
9

JavaScript onBlurの時間差を計算する必要がある2つのHTML入力ボックスがあります(リアルタイムで必要なので)、新しい入力ボックスに結果を挿入します。JavaScriptとの時間差を計算する

フォーマット例:十時00 & 12時30分私を与える必要があります:2:30の

感謝を!

+0

あなたは 'Java'、' JScript'、または 'Javascript'を使用していますか?彼らはすべて異なる言語です。 – Paulpro

+2

'javascript'は** java **のスクリプト言語です! – gdoron

+0

実際の日付はテキストボックスに表示されますか? HTMLといくつかのサンプルデータを投稿できますか? – mattytommo

答えて

24

は、ここに1つの可能なソリューションです。

function diff(start, end) { 
    start = start.split(":"); 
    end = end.split(":"); 
    var startDate = new Date(0, 0, 0, start[0], start[1], 0); 
    var endDate = new Date(0, 0, 0, end[0], end[1], 0); 
    var diff = endDate.getTime() - startDate.getTime(); 
    var hours = Math.floor(diff/1000/60/60); 
    diff -= hours * 1000 * 60 * 60; 
    var minutes = Math.floor(diff/1000/60); 

    // If using time pickers with 24 hours format, add the below line get exact hours 
    if (hours < 0) 
     hours = hours + 24; 

    return (hours <= 9 ? "0" : "") + hours + ":" + (minutes <= 9 ? "0" : "") + minutes; 
} 

DEMO:http://jsfiddle.net/KQQqp/

+0

ありがとう! – user1424332

+0

ここに秒を表示したい。私はここでどうすればいいですか? – Chinmay235

2

さて、この作品はほとんど素晴らしいです。今度はこのコードを使用して23:50 - 00:10あなたが得るものを参照してください。23:30 - 01:30でもそれは混乱です。 PHPで他の方法で答えを得ることですので:

$date1 = strtotime($_POST['started']); 
$date2 = strtotime($_POST['ended']); 
$interval = $date2 - $date1; 
$playedtime = $interval/60; 

しかし、それでもまだ、それはあなたのように動作します。 私も日付を持って来ると思う?

また、私の苦労した研究開発は私を助けました。

if (isset($_POST['calculate'])) { 
$d1 = $_POST['started']; 
$d2 = $_POST['ended']; 
if ($d2 < $d1) { 
    $date22 = date('Y-m-'); 
    $date222 = date('d')-1; 
    $date2 = $date22."".$date222; 
} else { 
$date2 = date('Y-m-d'); 
} 
$date1 = date('Y-m-d'); 
$start_time = strtotime($date2.' '.$d1); 
$end_time = strtotime($date1.' '.$d2); // or use date('Y-m-d H:i:s') for current time 
$playedtime = round(abs($start_time - $end_time)/60,2); 
} 

これは、翌日までの時間を計算する方法です。 //編集。最初に私はdate1 jnd date2を切り替えていました。この計算は翌日と昨日の最初の日付になるため、-1にする必要があります。私たちはこれに思い付いた私の友人と脳力の多くを改善した後

$begin=mktime(substr($_GET["start"], 0,2),substr($_GET["start"], 2,2),0,1,2,2003); 
$end=mktime(substr($_GET["end"], 0,2),substr($_GET["end"], 2,2),0,1,3,2003); 
$outcome=($end-$begin)-date("Z"); 
$minutes=date("i",$outcome)+date("H",$outcome)*60; //Echo minutes only 
$hours = date("H:i", $outcome); //Echo time in hours + minutes like 01:10 or something. 

だからあなたが実際にあなたの結果を得るために、コードの唯一の4行が必要です。あなたはわずか2分と32分のフルタイム(02:32の違いのような)を表示することができます。 最も重要なこと:まだ24時間表示で夜間を計算することができます。開始時刻は午後11時50分です(24時間表示23:50 - 01:00)。

最も重要なこと:入力を書式設定する必要はありません。あなたは23:00の入力として単純な2300を使用することができます。このスクリプトは、テキストフィールドの入力を正しいフォーマットに変換します。 最後のスクリプトは、method = "get"の標準HTMLフォームを使用しますが、POSTメソッドを使用するように変換することもできます。私はこの方法でそれを解決しcodeeval.com

から実際にこの問題:

0

この

var dif = (new Date("1970-1-1 " + end-time) - new Date("1970-1-1 " + start-time))/1000/60/60; 
-1

を試してみてはこれを試してみてください。

このプログラムは引数としてファイルを受け取りますので、私は小さなノードjsを使ってファイルを読み込みました。

ここに私のコードです。

var fs = require("fs"); 
fs.readFileSync(process.argv[2]).toString().split('\n').forEach(function (line) { 
    if (line !== "") { 
     var arr = line.split(" "); 
     var arr1 = arr[0].split(":"); 
     var arr2 = arr[1].split(":"); 
     var time1 = parseInt(arr1[0])*3600 + parseInt(arr1[1])*60 + parseInt(arr1[2]); 
     var time2 = parseInt(arr2[0])*3600 + parseInt(arr2[1])*60 + parseInt(arr2[2]); 
     var dif = Math.max(time1,time2) - Math.min(time1,time2); 
     var ans = []; 
     ans[0] = Math.floor(dif/3600); 
     if(ans[0]<10){ans[0] = "0"+ans[0]} 
     dif = dif%3600; 
     ans[1] = Math.floor(dif/60); 
     if(ans[1]<10){ans[1] = "0"+ans[1]} 
     ans[2] = dif%60; 
     if(ans[2]<10){ans[2] = "0"+ans[2]} 
     console.log(ans.join(":")); 
    } 
}); 
+0

OPがHTMLの入力ボックスとJavaScriptのonBlurイベントを言ったとき、私は彼が引数がファイルからではないことが明らかだったと思います。 – jagc

0

これは既に送信されたバージョンの最新バージョンです。それは秒です。

function diff(start, end) { 
    start = start.split(":"); 
    end = end.split(":"); 
    var startDate = new Date(0, 0, 0, start[0], start[1], 0); 
    var endDate = new Date(0, 0, 0, end[0], end[1], 0); 
    var diff = endDate.getTime() - startDate.getTime(); 
    var hours = Math.floor(diff/1000/60/60); 
    diff -= hours * (1000 * 60 * 60); 
    var minutes = Math.floor(diff/1000/60); 
    diff -= minutes * (1000 * 60); 
    var seconds = Math.floor(diff/1000); 

    // If using time pickers with 24 hours format, add the below line get exact hours 
    if (hours < 0) 
     hours = hours + 24; 

    return (hours <= 9 ? "0" : "") + hours + ":" + (minutes <= 9 ? "0" : "") + minutes + (seconds<= 9 ? "0" : "") + seconds; 
} 

私の更新バージョン:あなたはミリ秒に日付を変換し、代わりに分割することのオフに行くの

ができます。

例は、い - 年/カ月/週/日/時間/分/秒

例:あなたが提供秒でhttps://jsfiddle.net/jff7ncyk/308/

0

は私に結果を取得しないで、私の更新機能があなたに与えて見つけてくださいここで正しい秒 - ディネッシュJによって

function diff(start, end) { 
    start = start.split(":"); 
    end = end.split(":"); 
    var startDate = new Date(0, 0, 0, start[0], start[1],start[2], 0); 
    var endDate = new Date(0, 0, 0, end[0], end[1],end[2], 0); 
    var diff = endDate.getTime() - startDate.getTime(); 
    var hours = Math.floor(diff/1000/60/60); 
    diff -= hours * 1000 * 60 * 60; 
    var minutes = Math.floor(diff/1000/60); 
    var seconds = Math.floor(diff/1000)-120; 

    // If using time pickers with 24 hours format, add the below line get exact hours 
    if (hours < 0) 
     hours = hours + 24; 

    return (hours <= 9 ? "0" : "") + hours + ":" + (minutes <= 9 ? "0" : "") + minutes+ ":" + (seconds <= 9 ? "0" : "") + seconds; 
} 
0

我々は、一般的にNodeJsための最も簡単な解決策は、(コンソールがcallback-非同期実行中である)以下で、SPなどを呼び出し、I/O操作に要する時間を推定する時間差を必要とします:

var startTime = new Date().getTime(); 
//This will give you current time in milliseconds since 1970-01-01 

callYourExpectedFunction(param1, param2, function(err, result){ 
    var endTime = new Date().getTime(); 
    //This will give you current time in milliseconds since 1970-01-01 

    console.log(endTime - startTime) 
    //This will give you time taken in milliseconds by your function 

    if(err){ 
    } 
    else{ 
    } 
})