Удомельский форум

Удомельский форум (http://second.udomlya.ru/uf/index.php)
-   PHP (http://second.udomlya.ru/uf/forumdisplay.php?f=60)
-   -   FILETIME to Unixtime (http://second.udomlya.ru/uf/showthread.php?t=17426)

Troll 28.07.2009 16:28

FILETIME to Unixtime
 
Столкнулся тут с проблемой перевода времени из виндовой структуры FILETIME соответственно в unixtime. Достаточно длительное время потратил на решение данной задачи, так что выложу решении, вдруг кому понадобится. (Может даже мне, если в будущем подзабуду решение)

Код:

        //$time -Время в бинарном виде. В частности у меня читается из фала
        $unixtime = bin2hex($time); //Конвертируем в 16
        $unixtime = flip_endian($unixtime); //Меняем местами страшее и младшее слова
        $unixtime = base_convert($unixtime, 16, 10); //Приводим к 10-у виду
        $unixtime = win64_to_unix($unixtime) //преобразовываем в нужное время

function win64_to_unix($bci) {
        $magicnum = '116444735995904000'; //Разница между виндовым 1601 и юнихсовым 1970

        $t = bcsub($bci, $magicnum);    // Cast to Unix epoch
        $t = bcdiv($t, '10000000', 0);  // Convert from ticks to seconds

        return $t;
    }
   
function flip_endian($str) {
        if ( strlen($str) & 1 )
                $str = '0' . $str;

        $t = '';
        for ($i = strlen($str)-2; $i >= 0; $i-=2)
                $t .= substr($str, $i, 2);

        return $t;
    }



Текущее время: 00:45. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot