У меня есть два поля ввода HTML, для которых нужно рассчитать разницу во времени в JavaScript onBlur (так как мне это нужно в реальном времени) и вставить результат в новое поле ввода.
Пример формата: 10:00 и 12:30 мне нужно: 02:30
Спасибо!
У меня есть два поля ввода HTML, для которых нужно рассчитать разницу во времени в JavaScript onBlur (так как мне это нужно в реальном времени) и вставить результат в новое поле ввода.
Пример формата: 10:00 и 12:30 мне нужно: 02:30
Спасибо!
Вот одно из возможных решений:
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;
}
Ну, эта работа почти великолепна. Теперь используйте этот код для расчета: 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-часовом режиме aka: время начала 11:50 вечера, чтобы сказать 01:00 (в 24-часовых часах 23:50 - 01:00), потому что в 12-часовом режиме все равно работает.
Что самое важное: вам не нужно форматировать ввод. Вы можете использовать только 2300 как вход 23:00. Этот script преобразует ввод текстового поля в правильный формат. Последняя script использует стандартную форму html с методом = "get", но вы также можете преобразовать ее для использования метода POST.
С секунд, которые вы предоставили, не получите результат для меня, пожалуйста, найдите мою обновленную функцию, дающую вам правильные секунды здесь - By Dinesh 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;
}
Попробуйте это
var dif = ( new Date("1970-1-1 " + end-time) - new Date("1970-1-1 " + start-time) ) / 1000 / 60 / 60;
Это обновленная версия той, которая уже была отправлена. Это с секундами.
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;
}
Моя обновленная версия:
Позволяет конвертировать даты в миллисекунды и отключать их вместо разделения.
Пример - Годы/Месяцы/Недели/Дни/Часы/Минуты/Секунды
В зависимости от того, что вы позволяете войти, этот будет работать. Могут быть некоторые пограничные проблемы, если вы хотите разрешить 1:00 до 13:00
ПРИМЕЧАНИЕ: это НЕ использует объекты даты или moment.js
function pad(num) {
return ("0"+num).slice(-2);
}
function diffTime(start,end) {
var s = start.split(":"), sMin = +s[1] + s[0]*60,
e = end.split(":"), eMin = +e[1] + e[0]*60,
diff = eMin-sMin;
if (diff<0) { sMin-=12*60; diff = eMin-sMin }
var h = Math.floor(diff / 60),
m = diff % 60;
return "" + pad(h) + ":" + pad(m);
}
document.getElementById('button').onclick=function() {
document.getElementById('delay').value=diffTime(
document.getElementById('timeOfCall').value,
document.getElementById('timeOfResponse').value
);
}
<input type="time" id="timeOfCall">
<input type="time" id="timeOfResponse">
<button type="button" id="button">CLICK</button>
<input type="time" id="delay">
calTimeDifference(){
this.start = dailyattendance.InTime.split(":");
this.end = dailyattendance.OutTime.split(":");
var time1 = ((parseInt(this.start[0]) * 60) + parseInt(this.start[1]))
var time2 = ((parseInt(this.end[0]) * 60) + parseInt(this.end[1]));
var time3 = ((time2 - time1) / 60);
var timeHr = parseInt(""+time3);
var timeMin = ((time2 - time1) % 60);
}
TimeCount = function()
{
t++;
var ms = t;
if (ms == 99)
{
s++;
t = 0;
if ( s == 60)
{
m++;
s = 0;
}
}
Dis_ms = checkTime(ms);
Dis_s = checkTime(s);
Dis_m = checkTime(m);
document.getElementById("time_val").innerHTML = Dis_m + ":" + Dis_s+ ":" + Dis_ms;
}
function checkTime(i)
{
if (i<10) {
i = "0" + i;
}
return i;
}
Попробуйте это: на самом деле это проблема с codeeval.com
Я решил это таким образом.
Эта программа принимает файл в качестве аргумента, поэтому я использовал немного node 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(":"));
}
});
Для оценки времени, затрачиваемого операциями ввода-вывода, вызовами SP и т.д., нам требуется разность во времени, простейшее решение для NodeJs (консоль в процессе callback-async):
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{
}
})