Проблемы с датой при публикации на C # из JavaScript с использованием MomentJS - PullRequest
0 голосов
/ 12 июня 2018

У меня странная проблема с датами в JS и C # (ядро asp.net 2.1).Я добавляю даты во внешний интерфейс и пытаюсь отправить их обратно на сервер с помощью следующего JavaScript:

$("#editOperation").on("submit",
    function(e) {
        e.preventDefault();
        var form = $(this);
        var url = form.attr("action");

        // change date to YYYY-MM-DD format
        for (let i = 0; i < form[0].length; i++) {
            if (form[0][i].className.includes("hdn-exclude-")) {
                if (form[0][i].value) {
                    var date = moment(form[0][i].value);
                    form[0][i].value = date.format('YYYY-MM-DD');
                }
            }
        }

        var formData = new FormData(form.get(0));
        $.ajax({
            url: url,
            data: formData,
            type: "post",
            contentType: false,
            processData: false,
            success: function (response) {
                if (response.result) {
                    toastr.success("Success!");
                    setTimeout(function () {
                            window.location = $("#cancelEditOperation").attr("href");
                        },
                        1000);
                } else {
                    toastr.error(response.errorMessage);
                }
            }
        });
    });

Однако проблема, которую я получаю, заключается в том, что Дата, которая имеет день, ПРОШЛА 12-го числа любогоданный месяц (например, 13/07/2018 - австралийский формат), тогда C # будет, по-видимому, не в состоянии его проанализировать и присвоить ему значение по умолчанию 1/01/0001 12:00:00 AM.

Если дата имеет день ДО или ВКЛ.12 числа каждого данного месяца (например, 12/06/2018), тогда на стороне C # будет правильно: 6/12/2018 12:00:00 AM

Это моя модель на C #:

public class GetOperationExcludeDate
{
    public DateTime StartDate { get; set; }

    public DateTime EndDate { get; set; }
}

Имое действие:

[HttpPost("EditOperation/{id}")]
[AutoValidateAntiforgeryToken]
public async Task<ApiBooleanResponse> EditOperation(string id, GetOperationExcludeDate model)
{
    return await _transportCompanyService.EditServiceOperationAsync(id, model);
}

Как я могу нормализовать свои даты, чтобы C # распознавал формат в зависимости от региона и правильно его анализировал?(Я вижу, что он пытается проанализировать его как американский формат, когда ему предоставляется австралийский формат)

1 Ответ

0 голосов
/ 12 июня 2018

Отправьте свои даты в формате ISO 8601 .

Используя объект Javascript Date, вы получите:

var isoDate = myDate.toISOString(); // returns "2018-06-12T01:58:40.867Z"

или используйте Момент:

var isoDate = momentDate.format(); // returns "2018-06-12T10:58:40+09:00"
...