2013-12-03 3 views
1

Я пробовал создавать маркеры методом JSON из C#. У меня есть небольшая проблема с сопоставлением datetime в javascript.Как сравнить два datetime в javascript?

var nowDate= new Date(); 

    var LastTenMin= new Date(nowDate.getFullYear(), nowDate.getMonth(), nowDate.getDate(),nowDate.getHours(),nowDate.getMinutes()- 10); 

var Time1= data2.LastRecordTime; 

var image2; 

    var status; 


    if (new Date(Time1) < new Date(LastTenMin)) { 


    image2 = '/Images/truckOnline.png'; 


    status = "Truck is online."+"\n"+"Last seen:"+" "+Time1, 

    } 

else { 


    image2 = '/Images/truckOffline.png'; 
    status = "Truck is offline"+"\n"+"Last seen:"+" "+Time1, 


      } 

еще не работает! Есть маркеры TruckOnline на карте google. Где моя ошибка?

И LastRecordTime формат, как это в SQL: 04.12.2013 01:03:00

LastRecordTime=CONVERT(VARCHAR(10), [ReadTimeColumn], 104) + ' ' + CONVERT(VARCHAR(8), [ReadTimeColumn],108) 

ответ

2

Mehmet,

Похоже, вы сделали опечатку:

var LastTenMin= new Date(nowDate.getFullYear(), nowDate.getMonth(), nowDate.getDate(),nowDate.getHours(),nowDate.getMinutes(),- 10); 

должно быть (примечание к запятой):

var LastTenMin= new Date(nowDate.getFullYear(), nowDate.getMonth(), nowDate.getDate(),nowDate.getHours(),nowDate.getMinutes() - 10); 

Также вы пытались создать новый объект даты из объекта дата, это неверно:

new Date(LastTenMin) 

А вот более полное решение:

var nowDate= new Date(); 
var Time1 = new Date("04/12/2013 01:03:00"); 
var LastTenMin= new Date(nowDate.getFullYear(), nowDate.getMonth(), nowDate.getDate(), nowDate.getHours(), nowDate.getMinutes() - 10); 

// Should return true 
console.log(Time1 < LastTenMin); 

// Change the year to a point in the future 
Time1 = new Date("04/12/2014 01:03:00"); 

// Shold return false 
console.log(Time1 < LastTenMin); 

// So your original conditional should look like this: 
if (Time1 < LastTenMin) { 
    image2 = '/Images/truckOnline.png'; 
    status = "Truck is online."+"\n"+"Last seen:"+" "+Time1; 
} else { 
    image2 = '/Images/truckOffline.png'; 
    status = "Truck is offline"+"\n"+"Last seen:"+" "+Time1; 
} 

// And a more concise form: 
var isOnline = !(Time1 < LastTenMin); 
var image2 = isOnline ? '/Images/truckOnline.png' : '/Images/truckOffline.png'; 
var status = "Truck is " + (isOnline ? "Online" : "Offline") + "." + "\n" + "Last seen:" + " " + Time1 

Вот решение без комментариев:

var nowDate= new Date(); 
var Time1 = new Date(data2.LastRecordTime); 
var LastTenMin= new Date(nowDate.getFullYear(), nowDate.getMonth(), nowDate.getDate(), nowDate.getHours(), nowDate.getMinutes() - 10); 
var isOnline = !(Time1 < LastTenMin); 
var image2 = isOnline ? '/Images/truckOnline.png' : '/Images/truckOffline.png'; 
var status = "Truck is " + (isOnline ? "Online" : "Offline") + "." + "\n" + "Last seen:" + " " + Time1 

Мое целое решение при условии, что строка, содержащаяся в data2.LastRecordTime в формате: "MM.DD.YYYY HH: MM: SS".

+0

Спасибо за ваш ответ, но он не работает! – Mhmt

+0

Обновлен фрагментом кода, который вы можете использовать напрямую. Мой пример иллюстрирует эту проблему и не будет работать как решение для удаления. – bigbangtheorem

+0

Я попробовал ваш обновленный ответ. Я снова сработал! data2.LastRecordTime уже 04.12.2013 01:03:00 форматирование в SQL – Mhmt

1

Это будет звучать как увильнуть, но я хотел бы перейти к MomentJS так что вы получите следующий код:

var Time1 = moment("04/12/2013 01:03:00"); 
var lastTenMin = moment().subtract({minutes: 10}); 

if(Time1.isBefore(lastTenMin)){ 
    image2 = '/Images/truckOnline.png'; 
    status = "Truck is online."+"\n"+"Last seen:"+" "+Time1.local(); 
} else { 
    image2 = '/Images/truckOffline.png'; 
    status = "Truck is offline"+"\n"+"Last seen:"+" "+Time1.local(); 
}  

Помните, что JavaScript имеет случайный вне по-одному вопросов на сегодняшний день и месяц (один - на основе нуля, другой - на основе одного). Проблема, скорее всего, в этой строке:

var LastTenMin= new Date(nowDate.getFullYear(), nowDate.getMonth(), nowDate.getDate(),nowDate.getHours(),nowDate.getMinutes()- 10); 

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

P.S. Попробуйте использовать функцию форматирования calendar() ... это может быть очень хорошо подходит вашему пользовательскому интерфейсу.

+0

Нет формата «dd.MM.yyy hh: MM: ss» в MomentJS – Mhmt

+0

Да, есть. И если вы найдете причуды, вы можете указать свой собственный формат: http://momentjs.com/docs/#/parsing/string-format/ –

+0

Ой извините. Спасибо. Я еще раз проверю. – Mhmt

0

Я решил SQL.

Я установил новый колонок для разницы между временем и чтением.

DifferenceMinute=DATEDIFF(MINUTE,ReadTime,GETDATE()) 



if(DifferenceMinute>10) 

{ 

    bla bla 

    } 

else 
{ 

bla bla 

    } 
0

Для сравнения даты со временем в Javascript мы должны передать их в Date объект как «гггг/мм/дд чч: мм» формат, например, как "2014/05/19 23:20". Затем вы можете просто сравнить их с> или < меньше, чем символ в соответствии с вашим бизнес-правилом. Пожалуйста, ознакомьтесь с приведенным ниже кодом, чтобы узнать больше.

$(function() { 

    $("input#Submit").click(function() { 
     var startDateTime = $("input[name='StartDateTime']").val(); 
     var endDateTime = $("input[name='EndDateTime']").val(); 

     var splitStartDate = startDateTime.split(' '); 
     var splitEndDate = endDateTime.split(' '); 

     var startDateArray = splitStartDate[0].split('/'); 
     var endDateArray = splitEndDate[0].split('/'); 

     var startDateTime = new Date(startDateArray[2] + '/ ' + startDateArray[1] + '/' + startDateArray[0] + ' ' + splitStartDate[1]); 
     var endDateTime = new Date(endDateArray[2] + '/ ' + endDateArray[1] + '/' + endDateArray[0] + ' ' + splitEndDate[1]); 

     if (startDateTime > endDateTime) { 
      $("#Error").text('Start date should be less than end date.'); 
     } 
     else { 
      $("#Error").text('Success'); 
     } 
    }); 

}); 

Вы также можете увидеть рабочую демо here

Смежные вопросы