JSON日期错误的日期

时间:2011-05-13 14:50:06

标签: jquery ajax asp.net-mvc-2

我正在使用JQUERY ajax来调用MVC方法:

JQUERY:

$.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Home/GetApplication/" + id,
            dataType: "json",
            data: '',
            timeout: 10000,
            success: function (obj) {

                $('#Name').val(obj.Name);
                $('#ApplicationIdentifier').val(obj.ApplicationIdentifier);
                $('#Frequency').val(obj.FrequencyValue);
                var d = new Date(parseInt(obj.BaseDate.substr(6)));
                $('#BaseDate').val(d.getMonth() + '/' + d.getDay() + '/' + d.getFullYear());

            },
            error: function () {
                return;
            }
        });

MVC方法:

[HttpPost]
        public ActionResult GetApplication(int id)
        {
            return Json(new Application
                            {
                                Name = "Testing",
                                ApplicationIdentifier = "123ABC",
                                FrequencyValue = 1,
                                FrequencyType = 1,
                                BaseDate = DateTime.Now
                            });
        }

所有这一切都很好,除了我的表格上显示的日期是2011年4月5日,它应该是5/13/2011。我在这里错过了什么吗?感谢。

4 个答案:

答案 0 :(得分:1)

getMonth()返回0到11之间的值,因此只需向其添加1(source)。

答案 1 :(得分:1)

使用JavaScript和.NET之间的日期和时间可能很困难,我们通常在Unix应用程序中通过始终进行交互来处理这个问题:

[HttpPost]
public ActionResult GetApplication(int id)
{
    DateTime unixTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);

    return Json(new Application
        {
            Name = "Testing",
            ApplicationIdentifier = "123ABC",
            FrequencyValue = 1,
            FrequencyType = 1,
            BaseDate = (DateTime.Now - unixTime).TotalMilliseconds
         });
}

既然您的JavaScript应用程序具有Unix时间,它可以很容易地转换为日期(您还错误地格式化日期字符串):

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: "/Home/GetApplication/" + id,
    dataType: "json",
    data: '',
    timeout: 10000,
    success: function (obj) {
        var d = new Date(obj.BaseDate);
        var dateString = (d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear();

        $('#Name').val(obj.Name);
        $('#ApplicationIdentifier').val(obj.ApplicationIdentifier);
        $('#Frequency').val(obj.FrequencyValue);
        $('#BaseDate').val(dateString);
    },
    error: function () {
        return;
    }
});

另外,我不会将你的EF实体返回到前端,只给它真正需要的东西。通过使用dynamic对象,可以在此处推断出您的类型,并且BaseDate将成为您提供的任何类型:

[HttpPost]
public ActionResult GetApplication(int id)
{
    DateTime unixTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);

    return Json(new { 
            Name = "Testing",
            ApplicationIdentifier = "123ABC",
            FrequencyValue = 1,
            BaseDate = (DateTime.Now - unixTime).TotalMilliseconds
         });
}

答案 2 :(得分:1)

getMonth()返回0-11; getDay()获取星期几

答案 3 :(得分:0)

我将\/Date(1234567889)\/转换为javascript可以使用的日期的方式是:obj.BaseDate.slice(6, obj.BaseDate.length - 2);

Microsoft的日期序列化会导致字符串,因此您必须删除除数字以外的所有内容。

整行将成为var d = new Date(parseInt(obj.BaseDate.slice(6, obj.BaseDate.length - 2)));