Javascript: извлечь дату из строки? - PullRequest
2 голосов
/ 26 сентября 2011

У меня есть строка, отформатированная как

Today 3:28AM
Yesterday 3:28AM
08/22/2011 3:28AM

Что мне нужно сделать, так это как-то извлечь в переменную часть даты моей строки, т.е.«Сегодня», «Вчера» или дата в формате ДД / ММ / ГГГГ.

Возможно ли что-то подобное с Javascript?

Ответы [ 5 ]

3 голосов
/ 26 сентября 2011

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

function strToDate(dateStr) {
    var dayTimeSplit = dateStr.split(" ");  
    var day = dayTimeSplit[0];
    var time = dayTimeSplit[1];

    if (day == "Today") {
        day = new Date();
    } else if (day == "Yesterday") {
        day = new Date();
        day.setDate(day.getDate() - 1);
    } else {
        day = new Date(day);
    }

    var hourMinutes = time.substring(0, time.length -2);
    var amPM = time.substring(time.length -2, time.length);

    return new Date((day.getMonth() + 1) + "/" + day.getDate() + "/" + day.getFullYear() 
        + " " + hourMinutes  + " " + amPM);
}

Затем вы можете вызвать stroToDate для преобразования ваших форматов даты в действительный JavaScript Date:

console.log(strToDate("Today 3:28AM")); 
console.log(strToDate("Yesterday 3:28AM"));
console.log(strToDate("08/22/2011 3:28AM"));

Выходы:

Sun Sep 25 2011 03:28:00 GMT-0700 (Pacific Daylight Time)
Sat Sep 24 2011 03:28:00 GMT-0700 (Pacific Daylight Time)
Mon Aug 22 2011 03:28:00 GMT-0700 (Pacific Daylight Time)
1 голос
/ 26 сентября 2011

Очевидно, что «Сегодня» и «Вчера» никогда не могут быть преобразованы обратно в реальную числовую дату, а сейчас кажется, что вы пытаетесь сделать это, чтобы сохранить их как «Сегодня» и «Вчера», верно?

Похоже, что указанный вами дд / мм / гггг чч: ммхх всегда разделяется пробелом.

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

функция javascript: http://www.w3schools.com/jsref/jsref_split.asp

Что касается преобразования из «Сегодня» обратно в 26/09/2011 и т. Д., Вам необходимо искать решение со стороны XML.

0 голосов
/ 26 сентября 2011
var reTYD = /(today|yesterday|\d{1,2}\/\d{1,2}\/\d{4})/i;
console.log( myString.match(reTYD) );
0 голосов
/ 26 сентября 2011

Есть несколько способов сделать это.Я предложу 2 из них.

option1: Если день всегда в начале строки, вы можете захватить первую часть, используя регулярное выражение типа /([a-z0-9]*)\s|([0-9]{1,})\/([0-9]{1,})\/([0-9]{1,})\s/ <- я не лучший писатель регулярных выражений.</p>

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

0 голосов
/ 26 сентября 2011

Вот похожий вопрос: Javascript эквивалент php's strtotime ()?

Вот ссылка на статью: http://w3schools.com/jS/js_obj_date.asp

И предлагаемое решение:

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

var d=new Date("October 13, 1975 11:13:00");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...