【问题标题】:How to convert json date format to normal date format. Ex:'/Date(1388412591038)/' to '12-30-2013'?如何将 json 日期格式转换为普通日期格式。例如:'/Date(1388412591038)/' 到 '12-30-2013'?
【发布时间】:2014-01-17 10:51:24
【问题描述】:

这是我在客户端生成的 json。我将此 json 发布到服务器。但是 StartDate 和 EndDate 没有被转换。请帮忙。

[
    {
        "GoalTitle": "Competancy Goal",
        "Weightage": 30.5,
        "StartDate": "/Date(1388412173070)/",
        "EndDate": "/Date(1419948173070)/",
        "Status": 0,
        "editing": false,
        "lstSubGoals": [
            {
                "GoalTitle": "Competancy Goal - Sub goal",
                "Weightage": 31.5,
                "StartDate": "/Date(1388412173070)/",
                "EndDate": "/Date(1419948173070)/",
                "Status": 0,
                "editing": false,
                "lstSubGoals": []
            }
        ]
    },
    {
        "GoalTitle": "Strategy Goal",
        "Weightage": 60.5,
        "StartDate": "/Date(1388412173070)/",
        "EndDate": "/Date(1419948173070)/",
        "Status": 1,
        "editing": false,
        "lstSubGoals": []
    }
]

【问题讨论】:

  • 您应该使用 Json.NET 而不是默认的 javascript 序列化程序。
  • This 可以帮到你!
  • 我相信 Json.NET 在服务器中。一旦我将上述 json 字符串发布到服务器,在服务器中我将其接收为“1/1/0001 12:00:00 AM”。
  • 在将它传递给服务器之前,您是否使用了 JSON.stringify?另外,如果这是在客户端生成的,为什么不直接生成服务器可以理解的格式呢?

标签: javascript jquery asp.net asp.net-mvc json


【解决方案1】:
var StartDateServer = StartDate;
var parsedDate = new Date(parseInt(StartDateServer.substr(6)));
var finalDate = parsedDate.toLocaleDateString(); //result as mm/dd/yyyy

【讨论】:

    【解决方案2】:

    在您的 JS 文件中添加以下函数:

    function ConvertJsonDateString(jsonDate) {
            var shortDate = null;
            if (jsonDate) {
                var regex = /-?\d+/;
                var matches = regex.exec(jsonDate);
                var dt = new Date(parseInt(matches[0]));
                var month = dt.getMonth() + 1;
                var monthString = month > 9 ? month : '0' + month;
                var day = dt.getDate();
                var dayString = day > 9 ? day : '0' + day;
                var year = dt.getFullYear();
                shortDate = monthString + '-' + dayString + '-' + year;
            }
            return shortDate;
        };
    

    然后你可以像这样使用它:

    <script>
        var jsonDate = '/Date(1388412173070)/';
        var date = ConvertJsonDateString(jsonDate);
        alert(date)  // the result will be 12/30/2013
    </script>
    

    在此处查看结果:http://jsfiddle.net/lin/WrcC8/

    【讨论】:

    • 感谢您的帮助。但是,我是否需要遍历 json 并找到哪些是日期类型并调用该函数??
    • @dineshd87 是的。看起来 StartDateEndDate 是唯一的 Date 类型。
    • @Krishna 是的,但我的模型是递归的。 lstSubGoals 将再次包含子目标。就这样继续下去。有没有什么办法可以让我传递整个 json 字符串并返回格式化的日期。
    • @dineshd87 - 在将其转换为日期之前,您必须确切知道应该转换哪个节点(可转换?)。提取您想要的任何字符串并使用上面的代码获取日期格式。
    • @Krishna 感谢您的帮助。我会试试的。
    【解决方案3】:

    JSFIDDLE DEMO

    var num = "/Date(1388412591038)/".match(/\d+/g); //regex to extract numbers 
    var date = new Date(parseFloat(num)); //converting to date
    console.log(date.getMonth() + 1 + "-" + date.getDate() + '-' + date.getFullYear());
    

    控制台中的结果: 12-30-2013

    【讨论】:

    • 感谢您的帮助。但是,我是否需要遍历 json 并找到哪些是日期类型并调用该函数??
    • @dineshd87:没有 JSON 日期类型。 "/Date(1388412173070)/" 只是一个字符串。您必须提前知道哪些字符串值包含可提取的日期。
    • @dineshd87 - 请不要忘记投票所有有用的答案并接受一个作为答案:)
    • @Krishna 为什么 date.getMonth() 加 1 而其他类似 date.getDate() 和 date.getFullYear() 没有加任何数字?
    • @S.Pradeep - getMonth() 是基于零索引的,而其他的则不是。也就是说,一月用 0 表示,十二月用 11 表示。
    【解决方案4】:
    function parseJsonDate(jsonDate) {
        var offset = new Date().getTimezoneOffset() * 60000;
        var parts = /\/Date\((-?\d+)([+-]\d{2})?(\d{2})?.*/.exec(jsonDate);
        if (parts[2] == undefined) parts[2] = 0; 
        if (parts[3] == undefined) parts[3] = 0; 
        return new Date(+parts[1] + offset + parts[2]*3600000 + parts[3]*60000); 
    }
    

    参考来自:here

    【讨论】:

      【解决方案5】:

      @dineshd87 很简单,你可以在 jquery 中这样做:

      var date = new Date(//the milliseconds here);
      var dateString = date.getDate() + "/" + date.getMonth() + "/" + date.getFullYear();
      

      【讨论】:

      • 感谢您的帮助。但是,我是否需要遍历 json 并找到哪些是日期类型并调用该函数??
      • 其实这是最简单的方法。不错!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-04
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      相关资源
      最近更新 更多