JavaScript: Как скрыть DIV / ULs, которые представляют прошлые даты? - PullRequest
0 голосов
/ 15 сентября 2009

У меня есть код, который выглядит следующим образом:

<h3>Thursday Sep 10</h3>
<ul>great stuff in here</ul>

<h3>Friday Sep 18</h3>
<ul>other stuff in here</ul>

У них происходит обычная скрытая вещь jQuery: нажмите на H3, и UL внизу расширяется или сжимается. По умолчанию все они отображаются / открыты.

Я бы хотел настроить его так, чтобы любая прошедшая дата (например, 10 сентября в этом примере) по умолчанию сокращалась.

Кажется, я не могу заставить свою CMS выдавать хорошую сопоставимую дату (например, время эпохи) для использования в качестве идентификатора для H3. Есть ли способ, которым я могу использовать функцию Date () js, чтобы создать что-то подобное из существующей информации ("четверг, 10 сентября"), или каким-то другим способом, чтобы сделать это?

(Все даты указаны в 2009 году, а сайт не будет существовать в 2010 году, поэтому жесткое кодирование года в любые функции можно, если это то, что нужно сделать.)

Спасибо!

Ответы [ 4 ]

2 голосов
/ 15 сентября 2009

Первым препятствием является преобразование текстовых дат в допустимые строки, которые могут инициализировать объекты дат в JavaScript.

Процесс преобразования (включая допустимые строковые форматы) описан в http://programming.top54u.com/post/Javascript-Convert-String-to-Date.aspx.

К сожалению, ваши текстовые представления не являются допустимыми входными данными для конструктора JavaScript JavaScript. Вам нужно написать функцию для преобразования ваших строк в допустимое представление, прежде чем использовать их в конструкторе Date.

После инициализации объектов Date их можно сравнить (см. «Сравнение двух дат» на http://www.w3schools.com/jS/js_obj_date.asp).

1 голос
/ 15 сентября 2009

Я согласен с Мейо. Если у вас был доступ к значению даты и времени, и вы хотите преобразовать его в строку, аналогичную той, которая у вас есть («четверг, 10 сентября»), вы можете использовать this .

0 голосов
/ 15 сентября 2009

Мейо прав, что у нас нет быстрого пути. Итак, вот мой взгляд на DIY решение.

Обычно вы извлекаете дату и сравниваете ее сами.


var aMonths = { "Jan":0, "Feb":1 ..., "Sep":8, ... };
var aToday  = new Date();

var aH3Text = .....;  //  Get the value via jQuery
var aDataElements = aH3Text.split("");
var aMonthIndex   = aMonths[aDataElements[1]];
var aDateIndex    = aDataElements[2];

var aH3Date = new Date();
aH3Date.setFullYear(2009, aMonthIndex, aDateIndex);

if (aH3Date > today) {
    // BEFORE today
} else {
    // AFTER today
}

Надеюсь, это поможет.

0 голосов
/ 15 сентября 2009

Не усложняйте ; вам действительно не нужен правильный анализатор дат для сравнения ваших дат. У меня такое чувство, что ты ищешь что-то быстрое и грязное:

var now = new Date();
var nowHash = now.getMonth() << 5 + now.getDate();

$("h3").each(function (e) {
    var tokens = $(e).html().split(" ");
    var hash = [ "Jan", "Feb", ..., "Dec" ].indexOf(tokens[1]) << 5 + tokens[2];

    if (hash < nowHash) {
        // contract the <ul> that follows
    }
});

Месяц * 32 (или сдвиг на 5 бит влево) + дня достаточно, чтобы дать вам уникальный хэш даты, который можно сравнить с другими датами.

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