создание даты из временной шкалы в JavaScript - PullRequest
2 голосов
/ 14 сентября 2010

Я новичок в javascript и пытаюсь сравнить два значения даты, я получаю две строки значений времени в формате

06: 30: 47 AM

01: 10: 47PM

Мне нужно сравнить их, чтобы узнать, меньше ли первый, чем другой. Я не мог понять, как это сделать в javascript. Может кто-нибудь помочь?о

Ответы [ 6 ]

2 голосов
/ 14 сентября 2010

Я не думаю, что стандартная реализация может разобрать это. Я бы сделал что-то вроде этого:

function toDate(dateString) {
    var timeComponents = dateString.replace(/\s.*$/, '').split(':');

    if (dateString.indexOf("PM") > -1) {
       timeComponents[0] += 12;
    }

    var date = new Date();
    date.setHours(timeComponents[0]);
    date.setMinutes(timeComponents[1]);
    date.setSeconds(timeComponents[2]);

    return date;
}

if (toDate('06:30:47 AM') > toDate('01:10:47 PM')) {
    // ...
}
1 голос
/ 14 сентября 2010

JavaScript указанный синтаксический анализ даты / времени, на который вы можете положиться в кросс-браузерном режиме, удивительно ограничен.В течение долгого времени в спецификации не было обязательного формата даты с одной строкой, а на момент последней спецификации 5-го издания единственным обязательным форматом был ISO-8601 (и некоторые подмножества).Вы еще не можете полагаться на то, что браузеры реализовали эту часть спецификации 5-го издания.

Таким образом, у вас есть пара вариантов:

  1. Анализируйте строку самостоятельно и используйтеконструктор Date, который принимает отдельные части даты в виде чисел, например new Date(year, month, day, hour, minute, second, ...).(Вам нужно указать только столько, сколько вы хотите, поэтому, например, new Date(2010, 9, 14) - это 14 сентября 2010 г.)

  2. Используйте такую ​​библиотеку, как Момент .уже сделал работу за вас.Момент позволяет указать формат для разбора.

0 голосов
/ 14 сентября 2010
// specific formatter for the time format ##:##:## #M
var formatToMiliseconds = function(t){
    t = t.split(/[:\s]/);
    t = ((t[0] * 3600000) + (t[1] * 60000) * (t[2] * 1000)); // To ms
    t = t + (/PM/i.test(t[3]) ? 43200000 : 0); // adjust for AM/PM
    return t;
}

var time01 = formatToMiliseconds('06:30:47 AM');
var time02 = formatToMiliseconds('01:10:47 PM');

alert(time01 > time02); // false
allert(time01 < time02); // true

В качестве бонуса ваше время теперь более совместимо с объектом Date и другими вычислениями времени.

0 голосов
/ 14 сентября 2010

Я пробовал что-то подобное

var ts1 = "06:30:47 AM";

var ts2 = "01:10:47 PM";

var ds = new Date (). ToDateString ();

var d1 = новая дата (ds + "" + ts1);

var d2 = новая дата (ds + "" + ts2);

if (! (D2> d1)) {

alert («d1 должно быть меньше d2»);

}

Что-то не так с этим?

0 голосов
/ 14 сентября 2010

Если ваше время всегда в формате 00:00:00 AM, тогда

var a="06:30:47 AM";
var b="01:10:47 PM";

var at=parseInt(a.substring(0,8).replace(/(^0+|:)/g,""));
var bt=parseInt(b.substring(0,8).replace(/(^0+|:)/g,""));

if (a.charAt(9)=="P") {at=at+120000};
if (b.charAt(9)=="P") {bt=bt+120000};

if (at<bt) {
    // a is smaller
}
else
{
    // a is not smaller
};

.. должно быть кросс-браузерным и безопасным для времени / формата.

0 голосов
/ 14 сентября 2010

Использовать объект Date. Проверьте это: http://www.w3schools.com/jsref/jsref_obj_date.asp

Попробуйте поместить два значения в переменные даты и выполните следующее:

if(var1.valueOf() > var2.valueOf())
{
  //Do Something
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...