Сравнение меток времени Coldfusion и PHP в миллисекундах - PullRequest
2 голосов
/ 08 декабря 2011

Я создаю метку времени в CF8, используя пользовательскую функцию. Затем он передается через строку запроса в PHP и снова сравнивается с текущей меткой времени (используя time ()). Поскольку в CF8 нет встроенной опции миллисекунды для DateDiff (), я добавил 3 ноля в конец возвращаемого значения (в секундах).

Но, когда я сравниваю его с отметкой времени PHP, разница должна быть в секундах, но я получаю многочасовую разницу.

<cfscript>
function GetEpochTime() {
    datetime = Now();
    return DateDiff("s", "January 1 1970 00:00", datetime) & "000"; //zeroes padded for milliseconds
}
</cfscript>
<cfset foo = getepochtime() /> //Returns time stamp

В качестве аргумента метка времени CF имеет вид 1323344375000. При сравнении со штампом PHP со значением 1323362710000 разница составляет 18 555 000 миллисекунд (более 300 минут). Реальное время, которое прошло, может быть 2 секунды.

$php_ts = time() * 1000; //PHP timestamp is in seconds, too
$cf_ts = $_GET['coldfusion_timestamp'];
echo $ts_difference = ($php_ts - $cf_ts) / (1000 * 60); //Difference in minutes

Где моя конверсия не удалась?

1 Ответ

2 голосов
/ 08 декабря 2011

Вы не учитываете местное время сервера в контексте смещения по Гринвичу.

Измените ваш getEpochTime () на:

 return DateDiff("s", DateConvert("utc2Local", "January 1 1970 00:00"), datetime) & "000";

Источник: GetEpochTimeFromLocal () (Роб-Брукс Билсон)

...