0

First of all, I know that it's duplicate, but those questions aren't what I am looking for.

I'm using an API to add participants in an online application. When I post JSON object to endpoint, everything is posted except dates. There's some misunderstanding with date format. If I get existing participants and check the date format that's this:

{
   "participant":{  
      "ID":201954,
         //  Long Object
      "DateOfBirth":"\/Date(857305424000-0500)\/",
   }
}

I figured out that first 9 char are UNIX timestamp but rest of them?? not sure. Any idea what is this format?

EDIT Online application is made in .net/asp/c# not sure about them. But I am writing my code in php application which post json object via cURL

EDIT 2 I checked parsing wrong formats and got this error:

The value '0.48631700 1425319593' cannot be parsed as the type 'Int64'.'. Please see InnerException for more details.

Any idea how can I get the format of .net's int64 datetime in php?

Rizwan
  • 290
  • 1
  • 5
  • 15

1 Answers1

1

JSON itself does not specify how dates should be formatted, so you need to know the requirements of the target .NET application. Most likely it makes sense to convert to a "readable" date format

Example (php):

$timestamp=1333699439;
echo gmdate("Y-m-d\TH:i:s\Z", $timestamp); 
// outputs 2012-04-06T08:03:59Z

Example (.net):

DateTime d;
DateTime.TryParse("2012-04-06T08:03:59Z", out d); 
// receives 4/6/2012 8:03:59 AM (in US-format)

Edit:

.NET int64 format is a number of ticks since midnight 0001-01-01 00:00:00 (every tick is 1/10000000 of second) and UNIX timestamp is number of seconds since beginning of the UNIX epoch (1970-01-01 01:00:00), so desired result is $seconds = 621355968000000000/10000000 - $number_of_seconds, see Convert ticks to unix timestamp and https://kramerc.com/2010/11/30/converting-datetime-ticks-into-a-unix-timestamp-in-php/

Therefore, for JSON output you should do

$timestamp=1333699439;
$ticks = ($timestamp * 10000000) + 621355968000000000;
// outputs 634692962390000000

Test function php

function ticks_to_time($ticks) {
    return floor(($ticks - 621355968000000000) / 10000000);
}

$time = ticks_to_time(634692962390000000);
echo date("F j Y g:i:s A T", $time);
// outputs April 6 2012 4:03:59 AM EDT

Test function .net

Int64 intDate = 634692962390000000; 
DateTime dt = new DateTime(intDate); 
Console.WriteLine(dt.ToString()); 
// outputs 4/6/2012 8:03:59 AM
Community
  • 1
  • 1
user2316116
  • 6,726
  • 1
  • 21
  • 35
  • Thanks for this, but I don't have the access to .net application. I'll try giving "Y-m-d\TH:i:s\Z" format through json post and check if that works. – Rizwan Mar 02 '15 at 14:00
  • I checked and it responses with error. Saying "The value ''2012-04-06T08:03:59Z'' cannot be parsed as the type 'Int64'". I googled but couldn't find how to get time in int64 – Rizwan Mar 02 '15 at 15:14
  • Since now you know that date is expected as an int64 value, you need to convert it as shown in updated answer. – user2316116 Mar 03 '15 at 15:38
  • Thanks for the answer smirnov, I've got some really urgent work. So, can't even test this one. Will be checking tomorrow. I really appreciate it. Very very very thank you. – Rizwan Mar 03 '15 at 16:53