C# 使用ajax发送到控制器的日期正在更改

C# 使用ajax发送到控制器的日期正在更改,c#,jquery,json,asp.net-mvc,model-view-controller,C#,Jquery,Json,Asp.net Mvc,Model View Controller,我有一个奇怪的情况。当我使用ajax将日期时间值从视图发送到控制器时,控制器中的值会发生更改 例如,如果我的视图具有“30-08-2014”值(dd-MM-yyyy格式),则在我的控制器中接收到的值为“29-08-2014 23:00:00” 我认为问题所在的时区无效,但浏览器和应用程序(控制器)都在本地计算机上运行,因此它们应该具有相同的时区 我当前的时区是UTC-04:00圣地亚哥 此代码生成注释问题 索引视图 @{ Layout = ""; } <html> <

我有一个奇怪的情况。当我使用ajax将日期时间值从视图发送到控制器时,控制器中的值会发生更改

例如,如果我的视图具有“30-08-2014”值(dd-MM-yyyy格式),则在我的控制器中接收到的值为“29-08-2014 23:00:00”

我认为问题所在的时区无效,但浏览器和应用程序(控制器)都在本地计算机上运行,因此它们应该具有相同的时区

我当前的时区是UTC-04:00圣地亚哥

此代码生成注释问题

索引视图

@{
    Layout = "";
}

<html>
<head>
    <script src="@Url.Content("~/Content/Plugins/jQuery/jquery-1.11.3.min.js")"></script>

    <script type="text/javascript" language="javascript">
        $(document).ready(function () {
            $('#send-date').on('click', function () {
                $('#value-from-user').val($('#my-date').val().toDate().toISOString());
                var myData = { myDate: $('#my-date').val().toDate().toISOString() };
                $.ajax("Test/Date", {
                    data: myData,
                    dataType: 'HTML',
                    processData: true,
                    method: 'POST',
                    success: function(data) {
                        $('#result').html(data);
                    }
                });
            });
        });

        //input is dd-MM-yyyy format
        String.prototype.toDate = function () {
            var parts = this.split("-");
            return new Date(parts[2], parts[1] - 1, parts[0]);
        }
    </script>
</head>
<body>
<input type="text" id="value-from-user" disabled/> <br />
<label for="my-date">Input in dd-MM-yyyy format</label><input type="text" name="my-date" id="my-date" value="30-08-2014"/> <br/>
<input type="button" name="send-date" id="send-date" value="Send Date"/><br/>
<div id="result">

</div>
</body>
</html>
控制器

public class TestController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Date(DateTime myDate)
        {
            return PartialView(myDate);
        }
    }
改变这个

$.ajax("Test/Date", {
                data: myData,
                dataType: 'HTML',
                processData: true,
                method: 'POST',
                success: function(data) {
                    $('#result').html(data);
                }
            });

已更新


正如您在
toISOString()
中看到的问题,到达控制器的值是您正在发送转换为ISO字符串的数据的
javascript警报中显示的值。ISO使用UTC。然后,控制器在自己的时区(而不是UTC)中解释日期值,因为它不知道如何更好地解释。长和短,不要使用
.toISOString()
。特别是,如果你只关心约会的那部分,那么你也只会在来回走动的时候射中自己的脚。只需将其格式化为YYYY-MM-DD即可。

正如您在toISOString()中看到的问题,控制器的值是javascript警报中显示的值,根据文档(),在toISOString()中,时区始终为零UTC偏移量。
$.ajax("Test/Date", {
                data: myData,
                dataType: 'HTML',
                processData: true,
                method: 'POST',
                success: function(data) {
                    $('#result').html(data);
                }
            });
$.ajax("Test/Date", {
                data: myData,                    
                method: 'POST',
                success: function(data) {
                    $('#result').html(data);
                }
            });