2013-11-23 5 views
1

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

function val_date(input){ 
    var date = new Date(input); 
    date = date.getTime()/1000; 
    var timestamp = new Date().getTime() + (7 * 24 * 60 * 60 * 1000) 
    window.alert("Date: "+date + " = N_Date: "+timestamp); 
    if(timestamp > date || timestamp === date){ 
     // The selected time is less than 7 days from now 
     return false; 
    } 
    else if(timestamp < date){ 
    // The selected time is more than 7 days from now 
     return true; 
    } 
    else{ 
    // -Exact- same timestamps. 
     return false; 
    } 
} 

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

Дата: NaN = N_Date = 13255772630 (< - или что-то в этом роде).

Есть что-то, что я делаю неправильно здесь?
Не уверен, если это поможет, но мой формат даты является DD-MM-YYYY

+2

* «... предупреждение просто говорит: Дата: NaN» * Это говорит вам, что 'input', что бы это ни было, является строкой, которая не может быть проанализирована конструктором' Date'. Результатом вызова 'new Date (« некоторая некорректная строка ») является' Date', чей номер времени «NaN». –

+1

Что такое значение ввода? – mithunsatheesh

+0

Какой формат даты? – Praveen

ответ

4

Если вы сравниваете даты и не хотите включать время, вы можете использовать что-то вроде:

// dateString is format DD-MM-YYYY 
function isMoreThan7DaysHence(dateString) { 

    // Turn string into a date object at 00:00:00 
    var t = dateString.split('-'); 
    var d0 = new Date(t[2], --t[1], t[0]); 

    // Create a date for 7 days hence at 00:00:00 
    var d1 = new Date(); 
    d1.setHours(0, 0, 0, 0); 
    d1.setDate(d1.getDate() + 7); 

    return d0 >= d1; 
} 

Обратите внимание, что часы для сегодняшней даты должны быть обнулены.

+0

+1 Замечательно заметили, лучшая часть в твоем мне нравится - '--т [1]'. – Praveen

+0

И некоторые хотят строгого ввода в ECMAScript ... ;-) – RobG

+0

Это решило проблему, преобразование строки в действительную дату было, безусловно, правильным путем. Умный ход –

2

Дата: NaN Поскольку строка, вы передаете к дате создания не представляется возможным создать Дата


Попробуйте

fiddle Demo

Date.prototype.addDays = function (days) { 
    this.setDate(this.getDate() + days); 
    return this; 
}; 

function val_date(input) { 
    var inputDate = new Date(input); 
    var dateWeek = new Date().addDays(7); 
    console.log(inputDate, dateWeek); 
    if (inputDate < dateWeek) { 
     // The selected time is less than 7 days from now 
     return false; 
    } else { 
     // The selected time is more than 7 days from now 
     return true; 
    } 
} 
+0

Формат строки OP - это DD-MM-YYYY, который не будет правильно проанализирован большинством конструкторов даты браузера. Строки даты должны быть вручную проанализированы. Созданная дата будет в 0:00:00, но * dateWeek * будет в текущее время, поэтому вернет false на 7-й день, когда она вернет true. – RobG

0

Это довольно распространено, и если вы будете манипулировать датами, вы можете использовать библиотеку Javascript для этого. Существует отличный от moment.js называется

С помощью этого вы могли бы сделать что-то вроде:

moment().add('days', 7)

Чтобы найти в неделю в будущем.

0

Предполагая, что вход является действительным Javascript Дата объекта, вы могли бы, возможно, попробовать:

function dateDifference(oldDate) { 
    var currentDate = new Date(); 
    var difference = currentDate - oldDate; //unit: milliseconds 
    var numDays = 7; 
    var threshHoldTime = numDays * (24 * 60 * 60 * 1000); //seven days in milliseconds 
    if (difference > threshHoldTime) { 
     console.log("The difference is greateer then then 7 days"); 
    } 
    else { 
     console.log("the date is not enough: " + difference); 
    } 
} 
+0

* input * - это строка, а не объект даты. – RobG

0

Попробуйте, как это

var date = new Date(input).getTime(); // Get the milliseconds 
var today = new Date();  

//You can't compare date, 
//so convert them to milliseconds 
today = new Date(today.setDate(today.getDate() + 7)).getTime(); 
if (inputDate < today) { 
    // The selected time is less than 7 days from now 
    return false; 
} else if{() 
    // -Exact- same timestamps. 
    return false; 
} 
else { 
    // The selected time is more than 7 days from now 
    return true; 
} 
+0

* input * - строка, которая не будет корректно проанализирована конструктором Date (как указано в OP). Объекты даты ** ** могут быть напрямую сопоставлены. – RobG

+0

@RobG сравнение объектов даты не сработало проверить это http://jsfiddle.net/g9KGR/ Corrct me if mean wrong – Praveen

+0

@RobG 'var date = new Date (" 12-12-2013 ");' работает только в хром, но не работает в других браузерах. Я пропустил это раньше, поэтому я отправил ответ. – Praveen

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