Каким будет код для определения разницы во времени между двумя разными временами, которые находятся в 12-часовом формате с использованием javascript. Я использую эти два поля времени в моем динамическом представлении сетки.

 var gridNew = document.getElementById("<%= Gridview1.ClientID %>");
            if (gridNew.rows.length > 0) {
                for (i = 0; i < gridNew.rows.length - 2; i++) {
                    var frombox = document.getElementById("Gridview1_txtFrom_" + (i));
                    var tobox = document.getElementById("Gridview1_txtTo_" + (i));
                      if(frombox.value<=tobox.value){
                        alert("Enter valid time set");
                        return false;
1
avinoor 18 Фев 2016 в 13:15
Можешь показать код, поделиться скрипкой?
 – 
gurvinder372
18 Фев 2016 в 13:15
Вот код, который вы просили
 – 
avinoor
18 Фев 2016 в 13:20
Вы могли хотя бы показать формат времени.
 – 
RobG
18 Фев 2016 в 13:42

4 ответа

Вот как вы можете получить разницу во времени в миллисекундах между двумя настраиваемыми датами.

Math.abs(new Date(firstDateString).getTime() - new Date(secondDateString).getTime());

Если у вас есть проблемы с синтаксическим анализом / преобразованием в Date, рассмотрите возможность использования библиотеки, такой как date.js или moment.js.

С момента вы можете сделать что-то вроде этого:

var diff = moment('3:30','HH:mm').diff(moment('3:20','HH:mm'));

Если вам нужно утро / вечер:

var diff = moment('3:30 pm','HH:mm a').diff(moment('3:20 am','HH:mm a'));

Вот jsfiddle

3
Ivan Leonenko 18 Фев 2016 в 14:21
Я хотел разного между двумя временами
 – 
avinoor
18 Фев 2016 в 13:19
Но это именно то, что делает его код, можно было бы конкретизировать или привести пример?
 – 
Timon. Z
18 Фев 2016 в 13:21
@ Timon.Z ЕСТЬ 2 раза в 9:00 и 13:00
 – 
avinoor
18 Фев 2016 в 13:25
1-й - время начала, второй - время окончания.
 – 
avinoor
18 Фев 2016 в 13:26
1
@ IvanLeonenko - строки, совместимые с ISO 8601, также неправильно анализируются всеми используемыми браузерами, поэтому нет строк, которые следует передавать конструктору Date (или Date.parse). И OP говорит « раз в 12-часовом формате », а не даты.
 – 
RobG
18 Фев 2016 в 14:20

Времена в JS могут быть проблемой при кроссбраузерности, и любой, кому приходилось отлаживать странное кроссбраузерное поведение, может это подтвердить. Я узнал, как никогда раньше, когда я хочу делать что-либо с датами в JS, задействует библиотеку moment.js.

Поначалу я сопротивлялся, так как думал, что почти все смогу сделать сам и сам покатайся. Это кубинская сигара, и никакие домашние прогулки не могут покрыть все необходимые инструменты.

Я не скажу вам, как исправить, просто дам вам инструмент ...

момент (). diff

Наслаждайтесь!

0
Sten Muchow 18 Фев 2016 в 13:27
1
Спасибо. Но я ничего не знаю о библиотеке moment.js
 – 
avinoor
18 Фев 2016 в 13:35
Это правильное решение, работа со временем и датой в Javascript может быть обременительной, если вы не используете какую-либо библиотеку.
 – 
Timon. Z
18 Фев 2016 в 13:40
Просто сказать « Использовать библиотеку X » - не ответ.
 – 
RobG
18 Фев 2016 в 13:44
- дать кому-то инструменты и направление куда лучше, чем дать ответ ложкой. Вы узнаете больше и растете еще больше ... Я не просто сказал использовать lib x - я дал чертовски вескую причину и чертовски хорошую библиотеку для варианта использования. Вы знаете разницу между сафари и хромом и как они обрабатывают даты? Я не делал этого, пока не потратил 3 часа на его отладку ... На этот раз moment.js спас бы меня.
 – 
Sten Muchow
18 Фев 2016 в 19:04
- moment.js похож на lodash для свиданий ... Теперь вы это сделаете!
 – 
Sten Muchow
18 Фев 2016 в 19:06

Вы не указали формат времени, кроме как "12-часовой формат". Алгоритм состоит в том, чтобы проанализировать и преобразовать их в общие единицы, например, секунды, найти разницу, а затем отформатировать ее обратно в любые подходящие единицы.

Поэтому, если время указано в формате h: m: s a / p, например «9:42:15 am», и вы хотите получить результат в аналогичном формате, тогда могут помочь следующие функции.

/*  Convert time in h:m:s a/p format to seconds
**  Seconds component is optional, h:m is OK
**  Tolerates space before am/pm, leading and trailing whitespace
**  Doesn't validate string
**
**  @param {string} s - time to parse
**  @returns {number} time converted to seconds.
*/
function hmsToSeconds(s) {
  var b = s.match(/\d+/g);
  var am = /am\s*$/i.test(s);
  return ((b[0] % 12) + (am? 0:12))*3600 + (b[1]*60) + (+b[2]||0);
}

/*  Convert seconds to time in h:mm:ss format
**  Maintains sign of input (+/-).
**
**  @param {number} s - seconds to convert
**  @returns {string} seconds converted to h:mm:ss.
*/
function secToHMS(s) {
  function z(n){return (n<10? '0' : '') + n}
  var sign = s < 0? '-' : '';
  s = Math.abs(s);
  return sign + (s/3600 | 0) + ':' + z((s%3600 / 60 |0)) + ':' + z(s%60);
}

function getTimeDifference(t0, t1) {
  return secToHMS(hmsToSeconds(t1) - hmsToSeconds(t0)); 
}

document.write(getTimeDifference('11:32 am','12:38:51pm'));
0
RobG 18 Фев 2016 в 14:18
Это довольно близко к тому, что я хотел
 – 
avinoor
18 Фев 2016 в 14:27

Попробуйте этот простой плагин, чтобы узнать разницу во времени.

https://github.com/gayanSandamal/good-time

Импортировать метод goodTimeDiff из good-time.js в свой проект

import {goodTimeDiff} from './scripts/good-time.js'

Объявить объект, чтобы задать настройки, как показано ниже. let settings = {}

Теперь присвоить значения времени объявленной объектной переменной. * время должно быть в стандартном формате и должно быть строкой! * 'from' не является обязательным, значением по умолчанию будет текущее время браузера.

let settings = {
    'from': '2019-01-13T00:00:29.251Z',
    'to': '2018-09-22T17:15:29.251Z'
}

Теперь вызываем метод goodTimeDiff () и передаем переменную объекта настроек в качестве параметра.

goodTimeDiff(settings)

Наконец, назначьте метод любой переменной, которую хотите.

let lastCommentedTime = goodTimeDiff(timeSettings)
0
Gayan Sandamal 13 Янв 2019 в 00:46