Как бы вы определили разницу во времени от двух текстовых полей в Javascript?Проверить разницу во времени в Javascript
ответ
Импровизировать. Вычтите код JavaScript Date
объекты, чтобы получить их разность:
// use a constant date (e.g. 2000-01-01) and the desired time to initialize two dates
var date1 = new Date(2000, 0, 1, 9, 0); // 9:00 AM
var date2 = new Date(2000, 0, 1, 17, 0); // 5:00 PM
// the following is to handle cases where the times are on the opposite side of
// midnight e.g. when you want to get the difference between 9:00 PM and 5:00 AM
if (date2 < date1) {
date2.setDate(date2.getDate() + 1);
}
var diff = date2 - date1;
// 28800000 milliseconds (8 hours)
Вы можете конвертировать миллисекунды в час, минуты и секунды, как это:
var msec = diff;
var hh = Math.floor(msec/1000/60/60);
msec -= hh * 1000 * 60 * 60;
var mm = Math.floor(msec/1000/60);
msec -= mm * 1000 * 60;
var ss = Math.floor(msec/1000);
msec -= ss * 1000;
// diff = 28800000 => hh = 8, mm = 0, ss = 0, msec = 0
Вы можете конвертировать время в виде строки в 24-часовой формат:
function parseTime(s) {
var part = s.match(/(\d+):(\d+)(?:)?(am|pm)?/i);
var hh = parseInt(part[1], 10);
var mm = parseInt(part[2], 10);
var ap = part[3] ? part[3].toUpperCase() : null;
if (ap === "AM") {
if (hh == 12) {
hh = 0;
}
}
if (ap === "PM") {
if (hh != 12) {
hh += 12;
}
}
return { hh: hh, mm: mm };
}
parseTime("12:00 AM"); // {hh: 0, mm: 0}
parseTime("12:00 PM"); // {hh: 12, mm: 0}
parseTime("01:00 PM"); // {hh: 13, mm: 0}
parseTime("23:00"); // {hh: 23, mm: 0}
Я никогда не знаю, будут ли даты в этом формате анализироваться как d/m/y или m/d/y. Официальные форматы принимаются здесь (независимо от того, что принимает Date.parse()), https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse –
что здесь +1? Какая часть даты - это увеличение? –
Я знаю, что это древний, но где во всем этом тарабарщине что-нибудь читается из полей формы? Все, что я вижу, это код с жестким кодом. Как я могу получить разницу между тем, что мой пользователь набрал в мои два 'input type =" text "' поля, а не между 9:00 и 17:00? – Martha
Хорошее решения является имеющимся в
http://blogs.digitss.com/javascript/calculate-datetime-difference-simple-javascript-code-snippet/
дает выход в желаемый формате из
Всё различиядней: часы: минуты: секунды.
Слегка модифицированная версия этого кода показан ниже
var vdaysdiff; // difference of the dates
var vhourDiff;
var vmindiff;
var vsecdiff;
vdaysdiff = Math.floor(diff/1000/60/60/24); // in days
diff -= vdaysdiff*1000*60*60*24;
vhourDiff = Math.floor(diff/1000/60/60); // in hours
diff -= vhourDiff*1000*60*60;
vmindiff = Math.floor(diff/1000/60); // in minutes
diff -= vmindiff*1000*60;
vsecdiff= Math.floor(diff/1000); // in seconds
//Text formatting
var hourtext = '00';
if (hourDiff > 0){ hourtext = String(hourDiff);}
if (hourtext.length == 1){hourtext = '0' + hourtext};
var mintext = '00';
if (mindiff > 0){ mintext = String(mindiff);}
if (mintext.length == 1){mintext = '0' + mintext};
//shows output as HH:MM (i needed shorter duration)
duration.value= hourtext + ':' + mintext;
Вот мое исполнение ....
function get_time_difference(earlierDate, laterDate)
{
var oDiff = new Object();
// Calculate Differences
// ------------------------------------------------------------------- //
var nTotalDiff = laterDate.getTime() - earlierDate.getTime();
oDiff.days = Math.floor(nTotalDiff/1000/60/60/24);
nTotalDiff -= oDiff.days * 1000 * 60 * 60 * 24;
oDiff.hours = Math.floor(nTotalDiff/1000/60/60);
nTotalDiff -= oDiff.hours * 1000 * 60 * 60;
oDiff.minutes = Math.floor(nTotalDiff/1000/60);
nTotalDiff -= oDiff.minutes * 1000 * 60;
oDiff.seconds = Math.floor(nTotalDiff/1000);
// ------------------------------------------------------------------- //
// Format Duration
// ------------------------------------------------------------------- //
// Format Hours
var hourtext = '00';
if (oDiff.days > 0){ hourtext = String(oDiff.days);}
if (hourtext.length == 1){hourtext = '0' + hourtext};
// Format Minutes
var mintext = '00';
if (oDiff.minutes > 0){ mintext = String(oDiff.minutes);}
if (mintext.length == 1) { mintext = '0' + mintext };
// Format Seconds
var sectext = '00';
if (oDiff.seconds > 0) { sectext = String(oDiff.seconds); }
if (sectext.length == 1) { sectext = '0' + sectext };
// Set Duration
var sDuration = hourtext + ':' + mintext + ':' + sectext;
oDiff.duration = sDuration;
// ------------------------------------------------------------------- //
return oDiff;
}
Эта функция возвращает строку с отличием от строки даты и времени и текущее время и время.
function get_time_diff(datetime)
{
var datetime = typeof datetime !== 'undefined' ? datetime : "2014-01-01 01:02:03.123456";
var datetime = new Date(datetime).getTime();
var now = new Date().getTime();
if(isNaN(datetime))
{
return "";
}
console.log(datetime + " " + now);
if (datetime < now) {
var milisec_diff = now - datetime;
}else{
var milisec_diff = datetime - now;
}
var days = Math.floor(milisec_diff/1000/60/(60 * 24));
var date_diff = new Date(milisec_diff);
return days + " Days "+ date_diff.getHours() + " Hours " + date_diff.getMinutes() + " Minutes " + date_diff.getSeconds() + " Seconds";
}
Испытано в Google Chrome console
(нажмите F12)
get_time_diff()
1388534523123 1375877555722
"146 Days 12 Hours 49 Minutes 27 Seconds"
Как получить временное различие между датой = «2016/03/01 11:00» до даты = «2016/03/06 11:00». а также как мне сформировать дату для функции выше –
http://momentjs.com/ будет решать ваши проблемы при работе со временем и датами в javascript –
http://momentjs.com/docs/#/displaying/difference/ Это когда вам нужно рассчитать разницу между объектами момента –
Когда я попытался разница между той же отметкой времени он дал 0 дней 5 часов 30 минут
так точно получить его я вычитал 5 часов и 30 мин
function get_time_diff(datetime)
{
var datetime = typeof datetime !== 'undefined' ? datetime : "2014-01-01 01:02:03.123456";
var datetime = new Date(datetime).getTime();
var now = new Date().getTime();
if(isNaN(datetime))
{
return "";
}
console.log(datetime + " " + now);
if (datetime < now) {
var milisec_diff = now - datetime;
}else{
var milisec_diff = datetime - now;
}
var days = Math.floor(milisec_diff/1000/60/(60 * 24));
var date_diff = new Date(milisec_diff);
return days + "d "+ (date_diff.getHours() - 5) + "h " + (date_diff.getMinutes() - 30) + "m";
}
Это дополнение к dmd733 ответ. Я исправил ошибку с продолжительностью дня (ну, надеюсь, я это сделал, не смог проверить каждый случай).
Я также быстро добавил свойство String к результату, который содержит общее время (извините за плохой вложенный ifs !!). Например, если он используется для пользовательского интерфейса и указывает, когда что-то было обновлено (например, RSS-канал). Вид из места, но хорошо бы иметь:
function getTimeDiffAndPrettyText(oDatePublished) {
var oResult = {};
var oToday = new Date();
var nDiff = oToday.getTime() - oDatePublished.getTime();
// Get diff in days
oResult.days = Math.floor(nDiff/1000/60/60/24);
nDiff -= oResult.days * 1000 * 60 * 60 * 24;
// Get diff in hours
oResult.hours = Math.floor(nDiff/1000/60/60);
nDiff -= oResult.hours * 1000 * 60 * 60;
// Get diff in minutes
oResult.minutes = Math.floor(nDiff/1000/60);
nDiff -= oResult.minutes * 1000 * 60;
// Get diff in seconds
oResult.seconds = Math.floor(nDiff/1000);
// Render the diffs into friendly duration string
// Days
var sDays = '00';
if (oResult.days > 0) {
sDays = String(oResult.days);
}
if (sDays.length === 1) {
sDays = '0' + sDays;
}
// Format Hours
var sHour = '00';
if (oResult.hours > 0) {
sHour = String(oResult.hours);
}
if (sHour.length === 1) {
sHour = '0' + sHour;
}
// Format Minutes
var sMins = '00';
if (oResult.minutes > 0) {
sMins = String(oResult.minutes);
}
if (sMins.length === 1) {
sMins = '0' + sMins;
}
// Format Seconds
var sSecs = '00';
if (oResult.seconds > 0) {
sSecs = String(oResult.seconds);
}
if (sSecs.length === 1) {
sSecs = '0' + sSecs;
}
// Set Duration
var sDuration = sDays + ':' + sHour + ':' + sMins + ':' + sSecs;
oResult.duration = sDuration;
// Set friendly text for printing
if(oResult.days === 0) {
if(oResult.hours === 0) {
if(oResult.minutes === 0) {
var sSecHolder = oResult.seconds > 1 ? 'Seconds' : 'Second';
oResult.friendlyNiceText = oResult.seconds + ' ' + sSecHolder + ' ago';
} else {
var sMinutesHolder = oResult.minutes > 1 ? 'Minutes' : 'Minute';
oResult.friendlyNiceText = oResult.minutes + ' ' + sMinutesHolder + ' ago';
}
} else {
var sHourHolder = oResult.hours > 1 ? 'Hours' : 'Hour';
oResult.friendlyNiceText = oResult.hours + ' ' + sHourHolder + ' ago';
}
} else {
var sDayHolder = oResult.days > 1 ? 'Days' : 'Day';
oResult.friendlyNiceText = oResult.days + ' ' + sDayHolder + ' ago';
}
return oResult;
}
Вот решение, которое работает для меня:
var date1 = new Date("08/05/2015 23:41:20");
var date2 = new Date("08/06/2015 02:56:32");
var diff = date2.getTime() - date1.getTime();
var msec = diff;
var hh = Math.floor(msec/1000/60/60);
msec -= hh * 1000 * 60 * 60;
var mm = Math.floor(msec/1000/60);
msec -= mm * 1000 * 60;
var ss = Math.floor(msec/1000);
msec -= ss * 1000;
alert(hh + ":" + mm + ":" + ss);
Мне нравится делать это через Эпохи.
var now = new Date();
var future = new Date(now.setMinutes(15));
var futureEpoch = moment(future).unix();
var nowEpoch = moment(now).unix();
var differenceInEpoch = nowEpoch - scheduledEpoch ;
console.log("futureEpoch : " + futureEpoch);
console.log("nowEpoch : " + nowEpoch);
console.log("differenceInEpoch : " + differenceInEpoch);
var diffTime = new Date(0); // The 0 there is the key, which sets the date to the epoch
diffTime.setUTCSeconds(differenceInEpoch);
console.log("new diffTime : " + diffTime);
захватить входные значения после отправки формы
$start_time = $_POST('start_time');
$end_time =$_POST('end_time');
$start = $start_time;
$end = $end_time;
$datetime1 = new DateTime($end);
$datetime2 = new DateTime($start);
//echo $datetime1->format('H:i:s');
$interval = $datetime1->diff($datetime2);
$elapsed = $interval->format('%h:%i');
$time = explode(":",$elapsed);
$hours = $time[0];
$minutes = $time[1];
$tminutes = $minutes + ($hours*60);
переменного $ tminutes это общая разница в минутах, рабочий час составляет $ Hour
Ваш код не работает. – Mistalis
, с какой ошибкой вы столкнулись, он отлично работает для меня! –
Вопрос автор хочет знать, как это сделать в js, поэтому em i. –
Времени различий в миллисекунды
firstDate.getTime() - secondDate.getTime()
В моем случае я собираюсь хранить время в миллисекундах на хромовом хранилище и попытаться найти diff через несколько часов.
function timeDiffInHours(milliseconds){
time_diff = (new Date).getTime() - milliseconds
return parseInt((time_diff/(1000*60*60)) % 24)
}
// This is again sending current time and diff would be 0.
timeDiffInHours((new Date).getTime());
Я сделал некоторые усовершенствования для счетчика таймера
//example return : 01:23:02:02
// : 1 Day 01:23:02:02
// : 2 Days 01:23:02:02
function get_timeDifference(strtdatetime) {
var datetime = new Date(strtdatetime).getTime();
var now = new Date().getTime();
if (isNaN(datetime)) {
return "";
}
//console.log(datetime + " " + now);
if (datetime < now) {
var milisec_diff = now - datetime;
} else {
var milisec_diff = datetime - now;
}
var days = Math.floor(milisec_diff/1000/60/(60 * 24));
var date_diff = new Date(milisec_diff);
var msec = milisec_diff;
var hh = Math.floor(msec/1000/60/60);
msec -= hh * 1000 * 60 * 60;
var mm = Math.floor(msec/1000/60);
msec -= mm * 1000 * 60;
var ss = Math.floor(msec/1000);
msec -= ss * 1000
var daylabel = "";
if (days > 0) {
var grammar = " ";
if (days > 1) grammar = "s "
var hrreset = days * 24;
hh = hh - hrreset;
daylabel = days + " Day" + grammar ;
}
// Format Hours
var hourtext = '00';
hourtext = String(hh);
if (hourtext.length == 1) { hourtext = '0' + hourtext };
// Format Minutes
var mintext = '00';
mintext = String(mm);
if (mintext.length == 1) { mintext = '0' + mintext };
// Format Seconds
var sectext = '00';
sectext = String(ss);
if (sectext.length == 1) { sectext = '0' + sectext };
var msectext = '00';
msectext = String(msec);
msectext = msectext.substring(0, 1);
if (msectext.length == 1) { msectext = '0' + msectext };
return daylabel + hourtext + ":" + mintext + ":" + sectext + ":" + msectext;
}
Я хотел бы использовать только getTime();
и, например Date.now()
вернуть разницу в миллисекундах:
//specified date:
var oneDate = new Date("November 02, 2017 06:00:00");
//number of milliseconds since midnight Jan 1 1970 till specified date
var oneDateMiliseconds = oneDate.getTime();
////number of milliseconds since midnight Jan 1 1970 till now
var currentMiliseconds = Date.now();
//return time difference in miliseconds
alert(currentMiliseconds-oneDateMiliseconds);
- 1. Узнать разницу во времени JavaScript
- 2. вычислить разницу во времени
- 3. Вычислить разницу во времени с помощью JavaScript
- 4. Рассчитать разницу во времени с помощью javascript
- 5. Получить разницу во времени
- 6. получить разницу во времени?
- 7. Найти разницу во времени
- 8. измерять разницу во времени
- 9. Сравните разницу во времени
- 10. Как рассчитать разницу во времени?
- 11. Excel: проверить разницу во времени в зависимости от ячейки значения
- 12. Как проверить разницу во времени 12-часового формата в sql?
- 13. Рассчитать разницу во времени | строки
- 14. Пересчитать временную разницу во времени
- 15. Как рассчитать разницу во времени
- 16. чтобы рассчитать разницу во времени
- 17. Python - генерировать разницу во времени
- 18. Получить разницу во времени java.sql.Time
- 19. Как рассчитать разницу во времени
- 20. Как рассчитать разницу во времени и времени?
- 21. Как проверить разницу во времени двух объектов datetime?
- 22. PHP Рассчитать разницу во времени 24 часов
- 23. Получить разницу во времени в JavaScript формате ISO
- 24. Как найти разницу во времени между двумя моментами в javascript
- 25. Как рассчитать разницу во времени между строк в JavaScript,
- 26. Удалить разницу во времени с datetime в javascript
- 27. Получить разницу во времени Между двумя раз в Javascript
- 28. Как рассчитать разницу во времени в PHP и сохранить разницу во времени в базе данных mysql
- 29. Разница во времени в JavaScript
- 30. Проверьте разницу во времени два раза?
Какой формат пользователь, входящего в раз? –
Являются ли они двумя текстовыми полями, содержащими ТОЛЬКО значения времени? Например, «11:42 вечера» или «8:09 утра»? –
да, как то же, что и сказал – Kishh