2016-06-16 1 views
0

У меня есть функция javascript в некотором представлении. Контроллер отправит на это представление две даты (start_date & end_date). Все, что я хочу сделать в своей функции, - проверить состояние перед выполнением некоторых действий.Создание условия на датах в javascript

<script> 
$(function() { 
    var start_date = <% @date1 %> 
    var end_date = <% @date2 %> 
    unavailableDates = []; 
    $.ajax({ 
    url: '/preload', 
    data: {'voiture_id': <%= @voiture.id %>}, 
    dataType: 'json', 
    success: function(data) { 
     $.each(data, function(arrID, arrValue) { 
     for(var d = new Date(arrValue.start_date); d <= new Date(arrValue.end_date); d.setDate(d.getDate() + 1)) { 
      // CHECK that !(d >= start_date && d <= end_date) before push action 
      unavailableDates.push($.datepicker.formatDate('d-m-yy', d)); 
     } 
     }); 
} 
</script> 

. Типы start_date & датой_окончания

t.datetime "start_date" 
    t.datetime "end_date" 

Я надеюсь, что это было ясно, спасибо!

РЕШЕНИЕ:

var startDate = new Date(<%= @date1.to_i*1000 %>); 
    var endDate = new Date(<%= @date2.to_i*1000 %>); 

.

    if (!(d.getDate()>=startDate.getDate() && d.getDate()<=endDate.getDate())) 
       { 
       unavailableDates.push($.datepicker.formatDate('d-m-yy', d));  
       } 
+1

Это может быть дубликатом http://stackoverflow.com/questions/492994/compare-two-dates-with-javascript –

ответ

0

Вот фрагмент кода, который выполняет те же функции, которые вы пытаетесь достичь. Похоже, вам не хватает Функция getTime() при оценке даты.

/* setting up temporary date range for iteration */ 

var unavailableDates = []; 
var endDate=new Date(); 
var startDate=new Date(endDate); 
startDate.setDate(startDate.getDate()-7); 

for(var startdt= new Date(startDate); 
    startdt.getTime()<endDate.getTime(); 
    startdt.setDate(startdt.getDate()+1)){ 

    if(startdt.getTime()>=startDate.getTime() && startdt<=endDate.getTime()) 
    {   
     unavailableDates.push(new Date(startdt)); 
    }  
} 
+0

Благодаря @sameer, но я не вижу цели использования цикла , рядом с ним увеличивается сложность! –

+0

@Amine взяли ту же логику, что и ur-код, т. Е. Для (var d = new Date (arrValue.start_date); d <= новая дата (arrValue.end_date); d.setDate (d.getDate() + 1)), это зависит от вас, нужна ли им бизнес-логика или нет, продемонстрировали логику сравнения дат, принимающих ур логики. Однако, если вам нужно другое, вы должны объяснить это требование более подробно. – sameer

+0

Я нашел решение, это было все об этом: new Date (<% = @ date1.to_i * 1000%>); Спасибо, в любом случае ! –

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