swayamrath Ответов: 4

Синтаксический анализ строки на сегодняшний день с помощью javascript


Привет Ребята,

У меня есть два строковых значения

startdate_string = " 2/21/2017 12: 03 PM";
enddate_string = " 2/21/2017 12: 12 PM";

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

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

var startDate = новая дата (строка (startdate_string));
var endDate = новая дата (строка (enddate_string ));


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

Как я могу сделать это с помощью JavaScript?

Спасибо и с уважением,
Сваям

Что я уже пробовал:

startdate_string = " 2/21/2017 12: 03 PM";
enddate_string = " 2/21/2017 12: 12 PM";
var startDate = новая дата (строка (startdate_string));
var endDate = новая дата (строка (enddate_string ));
консоли.журнал(конечная дата-начальная дата);

[no name]

Попробуйте обойтись без "ПМ"

ZurdoDev

Для меня это прекрасно работает. Также удалите String (), так как это избыточно. Я получаю 540000.

4 Ответов

Рейтинг:
29

Maciej Los

Проверьте предыдущие ответы: Преобразование строки в дату с помощью javascript[^]

Ряндев[^] правильно-удаление String() вокруг строки-дата должна помочь:

startdate_string = "2/21/2017 12:03 PM";
enddate_string = "2/21/2017 12:12 PM";
var startDate = new Date(startdate_string);
var endDate = new Date(enddate_string);
console.log(endDate-startDate); 


Рейтинг:
2

Karthik_Mahalingam

попробуйте этот ручной синтаксический анализ

function convertToJSDate(datestr)
        {
           
            var parts = datestr.split(' ');
            var date = parts[0], time = parts[1], ampm = parts[2];
            var datepart = date.split('/');
            var timepart = time.split(':');
            var hours = timepart[0];
            var minutes = timepart[1];
            if (ampm == "PM" && hours < 12) hours = hours + 12;
            if (ampm == "AM" && hours == 12) hours = hours - 12; 
            
            var fianl = new Date(datepart[2], datepart[0] - 1, datepart[1], hours, minutes, 0, 0);
            return fianl;
        }
        convertToJSDate('2/21/2017 12:03 PM'); //Tue Feb 21 2017 12:03:00 GMT+0530 (India Standard Time)


демонстрация : JSFiddle [^]


Рейтинг:
0

Patrice T

Не делайте вещи более сложными, чем это необходимо.
startdate_string это струна и String(startdate_string) сделайте его струной, так что

var startDate = new Date(String(startdate_string));

и
var startDate = new Date(startdate_string);

это одно и то же.
когда код терпит неудачу, убедитесь во всем, что вы можете сузить поиск,
одно из решений состоит в том, чтобы попытаться напечатать как можно больше, чтобы знать, где происходит сбой.
startdate_string = "2/21/2017 12:03 PM";
enddate_string = "2/21/2017 12:12 PM";
var startDate = new Date(startdate_string);
var endDate = new Date(enddate_string);
console.log(startDate);
console.log(endDate);
console.log(endDate-startDate);

Другое решение-использовать отладчик в вашем браузере или использовать FireBug
-----
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
0

Peter Leow

Никогда так не делай. Вы не можете надежно работать с датой как со строкой. Вместо этого используйте Даты JavaScript[^]. Обратитесь к моему предыдущему ответ[^].