Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert DateTime To JSON DateTime

I have a WebService which return DateTime Field.

I get a result /Date(1379048144000)/ but

i want just 1379048144000 how can i achieve that.

[WebMethod]
public DateTime GetServerDate()
{
    return DateTime.Now;
}

by setting Header Content-Type: application/json; charset=utf-8; i got a result like /Date(1379048144000)/.

like image 766
manoj Avatar asked Sep 16 '13 05:09

manoj


4 Answers

with Json.NET :

string date = Newtonsoft.Json.JsonConvert.SerializeObject(DateTime.Now);    
like image 142
Ben Avatar answered Nov 16 '22 16:11

Ben


U can always solve your problem when sending a date in a JSON object to JS by converting the date as follows:

var myJSDate = (new Date(parseInt(obj.MyDate.substr(6)))).toJSON();

Where obj.Date contains the date you wanna format.

Then u'll get something like this: "2013-10-25T18:04:17.289Z"

U can always check it in Chrome console by writing:

(new Date()).toJSON();

Hope this helps!

like image 24
Matias Avatar answered Nov 16 '22 16:11

Matias


You could change your WS to return a long with the value of the DateTime. The value to return is the number of milliseconds since the Unix Epoch (01/01/1970). This could be done with an extension method on DateTime something like:

public static class DateTimeExtensions
{
    ...
    private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1);

    public static long ToUnixTime(this DateTime dateTime)
    {
        return (dateTime - UnixEpoch).Ticks / TimeSpan.TicksPerMillisecond;
    }
    ...
}

And your web service method might look something like:

public long GetMyDate(...)
{
    DateTime dateTime = ...;
    return dateTime.ToUnixTime();
}
like image 45
Joe Avatar answered Nov 16 '22 16:11

Joe


in client side you can use this function to show a right date to client(I use it on my projects):

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;
d = new Date(+parts[1] + offset + parts[2] * 3600000 + parts[3] * 60000);
date = d.getDate() + 1;
date = date < 10 ? "0" + date : date;
mon = d.getMonth() + 1;
mon = mon < 10 ? "0" + mon : mon;
year = d.getFullYear();
return (date + "." + mon + "." + year);
};

This function is return right date in format: dd.mm.yyyy, but you can change it if you need. I hope that I help you.

like image 5
mrakodol Avatar answered Nov 16 '22 15:11

mrakodol