I know this is old, but, in running into a vendor that inconsistently uses 5 different date formats in their APIs [and test servers with a variety of PHP versions from the 5's through the latest 7's], I decided to write a universal converter that works with a myriad of PHP versions.
This converter will take virtually any input, including any standard datetime format [including with or without milliseconds] and any Epoch Time representation [including with or without milliseconds] and convert it to virtually any other format.
To call it:
$TheDateTimeIWant=convertAnyDateTome_toMyDateTime[[thedateIhave],[theformatIwant]];
Sending null for the format will make the function return the datetime in Epoch/Unix Time. Otherwise, send any format string that date[] supports, as well as with ".u" for milliseconds [I handle milliseconds as well, even though date[] returns zeros].
Here's the code:
Here's some sample calls - you will note it also handles any time zone data [though as noted above, any non GMT time is returned in your time zone].
$utctime1="2018-10-30T06:10:11.2185007-07:00";
$utctime2="2018-10-30T06:10:11.2185007";
$utctime3="2018-10-30T06:10:11.2185007 PDT";
$utctime4="2018-10-30T13:10:11.2185007Z";
$utctime5="2018-10-30T13:10:11Z";
$dttm="10/30/2018 09:10:11 AM EST";
echo "";
echo "Epoch Time to a standard format
";
echo "
Epoch Tm: 1540905011 to STD DateTime ----RESULT: ".convertAnyDateTime_toMyDateTime["1540905011","Y-m-d H:i:s"]."";
echo "
Epoch Tm: 1540905011 to UTC ----RESULT: ".convertAnyDateTime_toMyDateTime["1540905011","c"];
echo "
Epoch Tm: 1540905011.2185007 to UTC ----RESULT: ".convertAnyDateTime_toMyDateTime["1540905011.2185007","c"]."";
echo "Returned as Epoch Time [the number of seconds that have elapsed since 00:00:00 Thursday, 1 January 1970, Coordinated Universal Time [UTC], minus leap seconds.]";
echo "
";
echo "
UTCTime1: ".$utctime1." ----RESULT: ".convertAnyDateTime_toMyDateTime[$utctime1,null];
echo "
UTCTime2: ".$utctime2." ----RESULT: ".convertAnyDateTime_toMyDateTime[$utctime2,null];
echo "
UTCTime3: ".$utctime3." ----RESULT: ".convertAnyDateTime_toMyDateTime[$utctime3,null];
echo "
UTCTime4: ".$utctime4." ----RESULT: ".convertAnyDateTime_toMyDateTime[$utctime4,null];
echo "
UTCTime5: ".$utctime5." ----RESULT: ".convertAnyDateTime_toMyDateTime[$utctime5,null];
echo "
NO MILIS: ".$dttm." ----RESULT: ".convertAnyDateTime_toMyDateTime[$dttm,null];
echo "";
echo "";
echo "Returned as whatever datetime format one desires";
echo "
UTCTime1: ".$utctime1." ----RESULT: ".convertAnyDateTime_toMyDateTime[$utctime1,"Y-m-d H:i:s"]." Y-m-d H:i:s";
echo "
UTCTime2: ".$utctime2." ----RESULT: ".convertAnyDateTime_toMyDateTime[$utctime2,"Y-m-d H:i:s.u"]." Y-m-d H:i:s.u";
echo "
UTCTime3: ".$utctime3." ----RESULT: ".convertAnyDateTime_toMyDateTime[$utctime3,"Y-m-d H:i:s.u"]." Y-m-d H:i:s.u";
echo "Returned as ISO8601";
echo "
UTCTime3: ".$utctime3." ----RESULT: ".convertAnyDateTime_toMyDateTime[$utctime3,"c"]." ISO8601";
echo "
";
Here's the output:
Epoch Tm: 1540905011 ----RESULT: 2018-10-30 09:10:11
Epoch Tm: 1540905011 to UTC ----RESULT: 2018-10-30T09:10:11-04:00
Epoch Tm: 1540905011.2185007 to UTC ----RESULT: 2018-10-30T09:10:11-04:00
Returned as Epoch Time [the number of seconds that have elapsed since 00:00:00 Thursday, 1 January 1970, Coordinated Universal Time [UTC], minus leap seconds.]
UTCTime1: 2018-10-30T06:10:11.2185007-07:00 ----RESULT: 1540905011.2185007
UTCTime2: 2018-10-30T06:10:11.2185007 ----RESULT: 1540894211.2185007
UTCTime3: 2018-10-30T06:10:11.2185007 PDT ----RESULT: 1540905011.2185007
UTCTime4: 2018-10-30T13:10:11.2185007Z ----RESULT: 1540905011.2185007
UTCTime5: 2018-10-30T13:10:11Z ----RESULT: 1540905011
NO MILIS: 10/30/2018 09:10:11 AM EST ----RESULT: 1540908611
Returned as whatever datetime format one desires
UTCTime1: 2018-10-30T06:10:11.2185007-07:00 ----RESULT: 2018-10-30 09:10:11 Y-m-d H:i:s
UTCTime2: 2018-10-30T06:10:11.2185007 ----RESULT: 2018-10-30 06:10:11.2185007 Y-m-d H:i:s.u
UTCTime3: 2018-10-30T06:10:11.2185007 PDT ----RESULT: 2018-10-30 09:10:11.2185007 Y-m-d H:i:s.u
Returned as ISO8601
UTCTime3: 2018-10-30T06:10:11.2185007 PDT ----RESULT: 2018-10-30T09:10:11-04:00 ISO8601
The only thing not in this version is the ability to select the time zone you want the returned datetime to be in. Originally, I wrote this to change any datetime to Epoch Time, so, I didn't need time zone support. It's trivial to add though.