使用 MomentJS 从 JavaScript 发布到 C# 时的日期解析问题

我在 JS 和 C#(asp.net core 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.


如果日期有任何给定月份的 BEFORE 或 ON 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# 能够根据区域识别格式并正确解析它?(我可以看到,当给出澳大利亚格式时,它正试图将其解析为美国格式)


BIG阳
浏览 215回答 1
1回答

DIEA

以ISO 8601格式发送您的日期。使用 JavascriptDate对象,您有:var&nbsp;isoDate&nbsp;=&nbsp;myDate.toISOString();&nbsp;//&nbsp;returns&nbsp;"2018-06-12T01:58:40.867Z"或使用时刻:var&nbsp;isoDate&nbsp;=&nbsp;momentDate.format();&nbsp;//&nbsp;returns&nbsp;"2018-06-12T10:58:40+09:00"
打开App,查看更多内容
随时随地看视频慕课网APP