How do I format a Microsoft JSON date?

后端 未结 30 3094
伪装坚强ぢ
伪装坚强ぢ 2020-11-21 04:48

I\'m taking my first crack at Ajax with jQuery. I\'m getting my data onto my page, but I\'m having some trouble with the JSON data that is returned for Date data types. Basi

相关标签:
30条回答
  • 2020-11-21 05:03

    Don't repeat yourself - automate date conversion using $.parseJSON()

    Answers to your post provide manual date conversion to JavaScript dates. I've extended jQuery's $.parseJSON() just a little bit, so it's able to automatically parse dates when you instruct it to. It processes ASP.NET formatted dates (/Date(12348721342)/) as well as ISO formatted dates (2010-01-01T12.34.56.789Z) that are supported by native JSON functions in browsers (and libraries like json2.js).

    Anyway. If you don't want to repeat your date conversion code over and over again I suggest you read this blog post and get the code that will make your life a little easier.

    0 讨论(0)
  • 2020-11-21 05:03

    Click here to check the Demo

    JavaScript/jQuery

    var = MyDate_String_Value = "/Date(1224043200000)/"
    var value = new Date
                (
                     parseInt(MyDate_String_Value.replace(/(^.*\()|([+-].*$)/g, ''))
                );
    var dat = value.getMonth() +
                             1 +
                           "/" +
               value.getDate() +
                           "/" +
           value.getFullYear();
    

    Result - "10/15/2008"

    0 讨论(0)
  • 2020-11-21 05:03

    If you say in JavaScript,

    var thedate = new Date(1224043200000);
    alert(thedate);
    

    you will see that it's the correct date, and you can use that anywhere in JavaScript code with any framework.

    0 讨论(0)
  • 2020-11-21 05:03

    I ended up adding the "characters into Panos's regular expression to get rid of the ones generated by the Microsoft serializer for when writing objects into an inline script:

    So if you have a property in your C# code-behind that's something like

    protected string JsonObject { get { return jsSerialiser.Serialize(_myObject); }}
    

    And in your aspx you have

    <script type="text/javascript">
        var myObject = '<%= JsonObject %>';
    </script>
    

    You'd get something like

    var myObject = '{"StartDate":"\/Date(1255131630400)\/"}';
    

    Notice the double quotes.

    To get this into a form that eval will correctly deserialize, I used:

    myObject = myObject.replace(/"\/Date\((\d+)\)\/"/g, 'new Date($1)');
    

    I use Prototype and to use it I added

    String.prototype.evalJSONWithDates = function() {
        var jsonWithDates = this.replace(/"\/Date\((\d+)\)\/"/g, 'new Date($1)');
        return jsonWithDates.evalJSON(true);
    }
    
    0 讨论(0)
  • 2020-11-21 05:03

    Add the jQuery UI plugin in your page:

    function DateFormate(dateConvert) {
        return $.datepicker.formatDate("dd/MM/yyyy", eval('new ' + dateConvert.slice(1, -1)));
    };
    
    0 讨论(0)
  • 2020-11-21 05:04

    For those using Newtonsoft Json.NET, read up on how to do it via Native JSON in IE8, Firefox 3.5 plus Json.NET.

    Also the documentation on changing the format of dates written by Json.NET is useful: Serializing Dates with Json.NET

    For those that are too lazy, here are the quick steps. As JSON has a loose DateTime implementation, you need to use the IsoDateTimeConverter(). Note that since Json.NET 4.5 the default date format is ISO so the code below isn't needed.

    string jsonText = JsonConvert.SerializeObject(p, new IsoDateTimeConverter());
    

    The JSON will come through as

    "fieldName": "2009-04-12T20:44:55"
    

    Finally, some JavaScript to convert the ISO date to a JavaScript date:

    function isoDateReviver(value) {
      if (typeof value === 'string') {
        var a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)(?:([\+-])(\d{2})\:(\d{2}))?Z?$/.exec(value);
          if (a) {
            var utcMilliseconds = Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]);
            return new Date(utcMilliseconds);
          }
      }
      return value;
    }
    

    I used it like this

    $("<span />").text(isoDateReviver(item.fieldName).toLocaleString()).appendTo("#" + divName);
    
    0 讨论(0)
提交回复
热议问题