DateTime.TryParse без культуры - PullRequest
0 голосов
/ 17 марта 2020

Я хочу проверить, является ли дата действительной для разбора. Но когда я попробовал с ниже логами c, он падает на действительную дату (например: 3/10/2020). Я получаю эту myDate через ajax запрос.

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

DateTime validMyDate;
if(DateTime.TryParse(myDate, CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None, out validMyDate)){}

Оцените вашу любезную помощь

Отредактировано: Пожалуйста, найдите код ajax здесь

//fileds

<input name="StartDate" id="StartDate" type="hidden" value="3/10/2020 12:00:00 AM"  data-val="true">
<input name="EndDate" id="EndDate" type="hidden" value="3/26/2020 12:00:00 AM"  data-val="true">

// ajax call
$.get(domainUrl + "Controller/Action",
            {
              strartDate: dateFormatter.fomat($('#StartDate').val(), "mm/dd/yyyy"),
                endDate:  dateFormatter.fomat($('#EndDate').val(), "mm/dd/yyyy");
            },
            function (result) {

            }).fail(function (error) {

            });


// date formatter
var dateFormatter = {
    fomat: function (date, format) {
        var year = date.getFullYear();
        var month = date.getMonth() < 10 ? '0' + date.getMonth() : date.getMonth();
        var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
        var newDate;
        switch (format) {
            case "dd/mm/yyyy": newDate = day + "/" + month + "/" + year;
                break;            
            default: newDate = year + "-" + month + "-" + day;
        }
        return newDate;
    }
}       

Обратите внимание : эта функция формата добавлена, потому что .val() не работает на попрошайничество, поэтому я снова форматирую его, чтобы проверить, работает ли оно.

1 Ответ

0 голосов
/ 17 марта 2020

Этот код определенно работает:

if (DateTime.TryParseExact("3/10/2020","d/M/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime validStartDate))
{
}

Но в вашей строке что-то гнилое. Если я скопирую «3/10/2020» из вашего комментария выше, это не сработает. Если я пишу это сам, это работает. Ваша строка должна быть в какой-то странной кодировке, но я не могу понять, что это такое.

РЕДАКТИРОВАТЬ: Чтобы удалить невидимых символов, сделайте следующее:

var str = "‎3‎/‎10‎/‎2020";
str = str.Replace("\u200E","");
if (DateTime.TryParseExact(str,"d/M/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime validStartDate))
{
}

но это будет взлом. Проблема должна быть изменена на другом конце.

...