Javascript преобразование даты, сортировка и отображение - PullRequest
0 голосов
/ 07 апреля 2011

У меня есть строка данных, которую мне нужно преобразовать, отсортировать и отобразить на веб-интерфейсе с использованием javascript.

Данные в этом формате
гггг-мм-дд чч: mm: ss название события здесь

Пример фида:
2011-04-19 00:00:00 название события1 здесь
2011-04-22 00:00: 00 название события 2 здесь
2011-05-25 00:00:00 название события 3 здесь
2011-04-13 00:00:00 название события 4 здесь
2011-12-13 00:00:00заголовок события5 здесь

Нужно преобразовать формат даты, отсортировать его по дате, пропустить события до текущей даты (текущая дата 04-21-2011):

Пример желаемого списка:
04-22-2011 название события 2 здесь
05-25-2011 название события 3 здесь
название события 12-13-2011 здесь

Заранее спасибо

Ответы [ 5 ]

0 голосов
/ 29 августа 2013
sorting dates ascending or descending
times = ["01-09-2013", "01-09-2013", "27-08-2013", "27-08-2013", "28-08-2013", "28-08-2013", "28-08-2013", "28-08-2013", "29-08-2013", "29-08-2013", "30-08-2013", "30-08-2013", "31-08-2013", "31-08-2013"]
function dmyOrdA(a,b){ return myDate(a) - myDate(b);}
function dmyOrdD(a,b){ return myDate(b) - myDate(a);}
function myDate(s){var a=s.split(/-|\//); return new Date(a[2],a[1]-1,a[0]);}

times.sort(dmyOrdA);
console.log(times)
0 голосов
/ 09 апреля 2011

Просто скажите вашим кодировщикам прекратить играть в 3D-шутеры и делать свою работу ^^

Шутки в сторону:

<script type="text/javascript">

var a, d, i, f, m, o, r, t, y;

a = [
    "2011-04-19 00:00:00 event1 title here",
    "2011-04-22 00:00:00 event2 title here",
    "2011-05-25 00:00:00 event3 title here",
    "2011-04-13 00:00:00 event4 title here",
    "2011-12-13 00:00:00 event5 title here"
];

r = [];
t = [];
for (i = 0; i < a.length; i++) {
    y = a[i].substr(0, 4);
    m = a[i].substr(5, 2);
    d = a[i].substr(8, 2);
    t[i] = Date.UTC(
        parseInt(y),
        parseInt(m - 1, 10),
        parseInt(d, 10),
        parseInt(a[i].substr(11, 2), 10),
        parseInt(a[i].substr(14, 2), 10),
        parseInt(a[i].substr(17, 2), 10)
    ) / 1000;
    r[i] = [t[i], a[i], m + "-" + d + "-" + y + a[i].substr(19)];
}

r.sort(
    function(a, b) {
        return a[0] - b[0];
    }
);

f = Date.UTC(2011, 4 - 1, 21, 0, 0, 0) / 1000;
for (i in r) {
    if (r[i][0] >= f)
        document.write(r[i][2] + "<br />");
}
</script>

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

0 голосов
/ 08 апреля 2011

Здесь можно сделать несколько плагинов, но они могут помочь:

С парсингом даты и манипуляциями можно справиться с помощью моего DateExtensions компонента.Управление списком дат (сортировка) было бы легко обработано моим ObCollectionOrdered компонентом.

Есть примеры обоих, которые должны помочь.

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

0 голосов
/ 08 апреля 2011

Похоже, вам нужно реализовать функцию, которая выполняет следующие задачи:

  1. Синтаксический анализ ввода : строка должна быть проанализирована в списке объектов ссвойства "date" и "title".Попробуйте сопоставить формат даты «ГГГГ-ММ-ДД» с регулярным выражением и создайте объект Date с его конструктором.

  2. Фильтрация данных : объекты должныбудет отклонено, если оно старше текущего времени и отсортировано по дате в порядке возрастания (от самого старого до самого нового).Даты можно сравнивать, а списки можно сортировать в исходном коде JavaScript.

  3. Форматирование вывода : объекты должны быть возвращены в виде списка строк с желаемым форматом даты,Попробуйте вывести дату, построив строку из получателя месяца, даты и года.

Конечно, вы можете использовать библиотеки для различных задач, таких как обработка даты, но использование чистого JavaScript должнодостаточно просто.Например:

<script language="javascript">
  var parseFeed = function(str, now) {
    var regex=/^(\d{4})-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d) (.*)$/
      , input=str.split(/\n/).sort(), len=input.length
      , output=[], now=now||new Date(), d, m;
    for (i=0; i<len; i++) {
      if (m = input[i].match(regex)) {
        d = new Date(m[1], m[2]-1, m[3], m[4], m[5], m[6]);
        if (d >= now) {
          output.push([m[2], m[3], m[1]].join('-') + ' ' + m[7]);
        }
      }
    }
    return output; // An array of sorted, yet-to-come, formatted events.
  };
  var input = ""
    + "2011-02-19 00:00:00 event0 title here\n"
    + "2011-04-19 00:00:00 event1 title here\n"
    + "2011-04-22 00:00:00 event2 title here\n"
    + "2011-05-25 00:00:00 event3 title here\n"
    + "2011-04-13 00:00:00 event4 title here\n"
    + "2011-12-13 00:00:00 event5 title here\n";
  var april12 = new Date(2011, 3, 21)
    , output = parseFeed(input, april21);
</script>
0 голосов
/ 08 апреля 2011

Это домашняя работа, которую вы заставляете нас делать: P, дайте мне немного времени, я вас кое с чем подцеплю.

var dateRE = /^(\d{2})[\/\- ](\d{2})[\/\- ](\d{4})/;
function dmyOrdA(a, b){
a = a.replace(dateRE,"$3$2$1");
b = b.replace(dateRE,"$3$2$1");
if (a>b) return 1;
if (a <b) return -1;
return 0; }
function dmyOrdD(a, b){
a = a.replace(dateRE,"$3$2$1");
b = b.replace(dateRE,"$3$2$1");
if (a>b) return -1;
if (a <b) return 1;
return 0; }
function mdyOrdA(a, b){
a = a.replace(dateRE,"$3$1$2");
b = b.replace(dateRE,"$3$1$2");
if (a>b) return 1;
if (a <b) return -1;
return 0; }
function mdyOrdD(a, b){
a = a.replace(dateRE,"$3$1$2");
b = b.replace(dateRE,"$3$1$2");
if (a>b) return -1;
if (a <b) return 1;
return 0; }

dateArray = new Array('15/10/2000','28/05/1999',
'17/09/2005','06/12/2004','02/01/1998');
dateArray.sort( dmyOrdA );
document.write('Ascending : ' + dateArray + '<br />');

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

Дата сортировки с about.com

...