2012-05-29 82 views
9

我有两个HTML输入框,需要计算JavaScript onBlur中的时差(因为我实时需要它),并将结果插入到新的输入框中。使用JavaScript计算时差

格式示例:10:00 & 12:30需要给我:02:30

谢谢!

+0

您正在使用'Java','JScript'或'Javascript'吗?他们都是不同的语言。 – Paulpro

+2

'javascript'是** NOT **'java'的脚本语言! – gdoron

+0

它们是文本框中的实际日期吗?你能发布HTML和一些示例数据吗? – mattytommo

回答

24

这里是一个可能的解决方案:

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行代码,让您的结果。你只需要几分钟或全时(如差别是02:32)2小时32分钟。 什么是最重要的:仍然可以在24小时计算一夜之间又名:开始时间下午11:50,让我们说01:00 AM(24小时制时间23:50 - 01:00),因为在12小时模式下它可以正常工作。

什么是最重要的:您不必格式化您的输入。您可以使用普通的2300作为23:00输入。该脚本将自行将文本字段输入转换为正确的格式。 最后一个脚本使用标准html表单,方法=“get”,但您可以将其转换为使用POST方法。

0

尝试这个

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

试试这个:其实这从codeeval.com

我解决它以这种方式有问题。

该程序需要一个文件作为参数,所以我用一个小节点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

您提供给秒钟之内没有得到结果到我,请找我更新的功能给你这里正确秒 - 通过迪内希Ĵ

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

我们一般需要的时间差以估计的I/O操作所用的时间,SP打电话等,为的NodeJS(控制台是callback-异步执行)最简单的办法是继:

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{ 
    } 
})