Преобразовать строку в дату в jQuery и Internet Explorer? - PullRequest
3 голосов
/ 29 октября 2010

Я хочу преобразовать строку даты в объект даты в jQuery, и приведенный ниже код прекрасно работает для Chrome и Firefox, но не для Internet Explorer:

<script type="text/javascript" charset="utf-8">
//Validate if the followup date is now or passed:
    jQuery.noConflict();
    var now = new Date();
    jQuery(".FollowUpDate").each(function () {
        if (jQuery(this).text().trim() != "") {
            var followupDate = new Date(jQuery(this).text().trim()); //Here's the problem
            alert(followupDate);
            if (followupDate <= now) {
                jQuery(this).removeClass('current');
                jQuery(this).addClass('late');
            }
            else {
                jQuery(this).removeClass('late');
                jQuery(this).addClass('current');
            }
        }
    });
</script>

Предупреждение доступно только для тестирования, а в Chrome и Firefox он возвращает объект даты, но в IE я получаю NaN.

Что не так, и как я могу сделать это преобразование, чтобы оно также работало в IE?

Ответы [ 5 ]

6 голосов
/ 15 февраля 2011

Этот вопрос помог мне найти решение проблемы конвертации дат.Я нашел способ конвертировать дату без использования отдельных сценариев или тестирования для типа браузера.

Приведенный ниже код принимает дату в формате 2011-01-01 (год, месяц, день).

function convertDate(stringdate)
{
    // Internet Explorer does not like dashes in dates when converting, 
    // so lets use a regular expression to get the year, month, and day 
    var DateRegex = /([^-]*)-([^-]*)-([^-]*)/;
    var DateRegexResult = stringdate.match(DateRegex);
    var DateResult;
    var StringDateResult = "";

    // try creating a new date in a format that both Firefox and Internet Explorer understand
    try
    {
        DateResult = new Date(DateRegexResult[2]+"/"+DateRegexResult[3]+"/"+DateRegexResult[1]);
    } 
    // if there is an error, catch it and try to set the date result using a simple conversion
    catch(err) 
    { 
        DateResult = new Date(stringdate); 
    }

    // format the date properly for viewing
    StringDateResult = (DateResult.getMonth()+1)+"/"+(DateResult.getDate()+1)+"/"+(DateResult.getFullYear());

    return StringDateResult;
}

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

1 голос
/ 06 июля 2011

Я не проверял это, но как насчет:

var followupdate = new Date(jQuery(this).text().trim().toString());

"toString()" должен заставить его интерпретироваться как строка;объект Date должен принять строку как допустимый ввод, и это может помешать IE бросить его.

1 голос
/ 30 октября 2010

Я понял: IE, очевидно, не принял шведский формат даты, поэтому я заменил строку на формат, который он принял:

var followupDate = new Date (datestring.replace ('-', '/'));

К сожалению, этот формат не был принят Firefox, поэтому мне пришлось сохранить исходный код для Chrome и Firefox, а затем использовать отдельный скрипт для IE с условными комментариями.

1 голос
/ 29 октября 2010

Если это строка, которая выглядит как дата, используйте это.

var followupDate = new Date(Date.Parse(jQuery(this).text().trim()));

Полагаю, вопрос, который я должен был задать, это что такое вывод

jQuery(this).text().trim()

0 голосов
/ 25 июля 2013

Я использую такой момент:

new Date(moment(item.ToDate));

Работает и со шведскими датами '2013-01-05':

new Date(moment('2013-01-05'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...