Что не так с моим сравнением даты Javascript - PullRequest
1 голос
/ 18 августа 2011

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

Может ли кто-нибудь увидеть в моем коде что-то очевидное, вызывающее проблему?

Проблема в том, что переменная даты Todays выглядит как обычная дата, но мои вычисления для следующей недели и прошлой недели выглядят как большие числа, и сравнение не сработает.

//Handles client side date selection changed
function dateSelectionChanged(sender, args) {

    //Declare array for Day names
    var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];

    //Get the date
    var date = sender.get_selectedDate();

    //Get todays Date
    var today = new Date();
    var nextWeek = new Date().setDate(today.getDate() + 7);
    var lastWeek = new Date().setDate(today.getDate() - 7);

    //Show the day name
    $('#<%= txtDay.ClientID %>').val(days[date.getDay()]);

    if ( date < lastWeek ) {
        alert('Date Under Week');
    }
    if ( date > nextWeek ) {
        alert('Date Over Week');
    }
}

А вот код в Debug, чтобы вы могли видеть значения: enter image description here

EDIT: Решение

//Handles client side date selection changed
function dateSelectionChanged(sender, args) {

    //Declare array for Day names
    var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];

    //Get the date
    var date = sender.get_selectedDate();

    //Get todays Date
    var today = new Date();
    var nextWeek = new Date().setDate(today.getDate() + 7);
    var lastWeek = new Date().setDate(today.getDate() - 7);

    //Get the dates in easier to compare format
    nextWeek = new Date(nextWeek);
    lastWeek = new Date(lastWeek);

    //Show the day name
    $('#<%= txtDay.ClientID %>').val(days[date.getDay()]);

    if ( date < lastWeek) {
        alert('Date Under Week');
    }
    if ( date > nextWeek) {
        alert('Date Over Week');
    }
}

Ответы [ 3 ]

2 голосов
/ 18 августа 2011

Для setDate JavaScript возвращает временные метки, которые представляют количество миллисекунд с 1 января 1970 года 00:00:00 до определенного момента времени. Это может выглядеть бесполезно, но на самом деле очень полезно, поскольку вы можете представлять любое время простым числом.

Если вы хотите получить обратно Date, вы можете использовать:

new Date(timestamp);

так, например добавить:

nextWeek = new Date(nextWeek);
lastWeek = new Date(lastWeek);
0 голосов
/ 18 августа 2011

Другой способ - установить даты следующим образом.

var today = new Date();
var nextWeek = new Date();
nextWeek.setDate(today.getDate() + 7);
var lastWeek = new Date();
lastWeek.setDate(today.getDate() - 7);
0 голосов
/ 18 августа 2011

Если вы не укажете аргументы, конструктор создаст объект Date для сегодняшняя дата и время по местному времени. Если вы поставите некоторые аргументы, но не другие, отсутствующие аргументы устанавливаются в 0. Если вы предоставить любые аргументы, вы должны указать, по крайней мере, год, месяц и день. Вы можете опустить часы, минуты, секунды и миллисекунды.

Дата измеряется в миллисекундах с полуночи 01 января 1970 г. УНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ. День держит 86 400 000 миллисекунд. Диапазон объектов Date -100 000 000 дней до 100 000 000 дней относительно 01 января 1970 года UTC.

попробуйте следующий код при сравнении дат

if ( today < lastWeek.getMilliseconds() ) {
        alert('Date Under Week');
    }
    if ( today > nextWeek.getMilliseconds() ) {
        alert('Date Over Week');
    }

Объект Date обеспечивает единообразное поведение на разных платформах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...