views:

2939

answers:

6

Hi,

My webservice is returning a datetime to a jQuery call. The returned data is

/Date(1245398693390)/

How can I convert this to a javascript friendly date?

+1  A: 

You can try a 3rd party library like json.net There's documention on the project site. It does say it requires .net 3.5.

Otherwise there's another one called Nii.json which i believe is a port from java. I found a link to it on this blog

David Archer
+6  A: 

I have been using this method for a while:

using System;

public class ExtensionMethods {
  // returns the number of milliseconds since Jan 1, 1970 (useful for converting C# dates to JS dates)
  public static double UnixTicks(this DateTime dt)
  {
    DateTime d1 = new DateTime(1970, 1, 1);
    DateTime d2 = dt.ToUniversalTime();
    TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
    return ts.TotalMilliseconds;
  }
}

Assuming you are developing against .NET 3.5, it's a straight copy/paste. You can otherwise port it.

You can encapsulate this in a JSON object, or simply write it to the response stream.

On the Javascript/JSON side, you convert this to a date by simply passing the ticks into a new Date object:

jQuery.ajax({
  ...
  success: function(msg) {
    var d = new Date(msg);
  }
}
Jeff Meatball Yang
+9  A: 

What is returned is milliseconds since epoch. You could do:

var d = new Date();
d.setTime(1245398693390);
document.write(d);

On how to format the date exactly as you want, see full Date reference at http://www.w3schools.com/jsref/jsref_obj_date.asp

Wesho
Or just var d = new Date(1245398693390);
Josh Stodola
This will come in handy too: var re = /-?\d+/; var m = re.exec(json_date_string); var d = new Date(parseInt(m[0]));
Tominator
@Wesho - how are you parsing out the "/Date(" and just grabbing the number?
ooo
+1  A: 

If you're having trouble getting to the time information, you can try something like this:

    d.date = d.date.replace('/Date(', '');
    d.date = d.date.replace(')/', '');  
    var expDate = new Date(parseInt(d.date));
d12
+2  A: 

If you pass a DateTime from a .Net code to a javascript code, C#:

DateTime net_datetime = DateTime.Now;

javascript treats it as a string, like "/Date(1245398693390)/":

You can convert it as fllowing:

var d = eval(net_datetime.slice(1, -1)) // convert the string to date correctly

or:

var d = eval("/Date(1245398693390)/".slice(1, -1)) // convert the string to date correctly

ytl
A: 

To parse the date string using String.replace with backreference:

var milli = "/Date(1245398693390)/".replace(/\/Date\((-?\d+)\)\//, '$1');
var d = new Date(parseInt(milli));
William