I have a problem with processing a SQL Server database dump in PHP.
I have one column called datatime with values like :
0x0000a0af00d7f2eb
I need to extract, in PHP, the date and time values of this column. I don’t have SQL Server available so I can’t use the obvious solution of CAST(0x0000a0af00d7f2eb AS datetime).
Someone has told me that this hex: 0000a0af00d7f2eb is created by 4 bytes of date and 4 bytes of time.
So I know that:
When I will change 0000a0af (first 4 bytes) to decimal I will get number of days from 1900. That works fine.
But when I’m trying to change last the 4 bytes (so there should be time) : 00d7f2eb to decimal I’m getting something which I can’t understand. It should be a time from midnight in milliseconds and sometimes this value is ~3 times lower.
Could anyone help in converting 0000a0af00d7f2eb to date? I know that time is between 5 AM and 11 PM, and the day is in last week.
According to the linked article in the other question linked to by Rene, SQL Server stores 3.33 millisecond intervals in the second set of 4 bytes, not milliseconds. So if you’re calculating with milliseconds, you will indeed be getting a time about 1/3 of what it should be. Using your example, let’s start by converting to decimal
Now multiply out by 3.3 to convert to milliseconds, and divide by 1000 to get seconds
So this represents about 47 thousand seconds after midnight. Dividing by 3600 seconds in an hour
So this represents a time of about 13.1 hours after midnight, which agrees with the result of the cast done in SQL Server.