помощь с функцией отметки времени php - PullRequest
0 голосов
/ 02 марта 2012

Мне нужно преобразовать метку времени в UTC-5

. $offset - это часовой пояс пользователя. Значения находятся в диапазоне от -12 до 12. $ds - это летнее время, если оно включено, оно добавитдополнительный часЯ сделал эту функцию, но я думаю, что она преобразует метку времени UTC-5 в новую метку времени, основанную на часовом поясе пользователя ... Мне нужно, чтобы функция была инвертирована, чтобы она вместо этого возвращала метку времени в UTC-5.Конечно, проблема намного больше, чем эта, но вот где я застрял.Есть ли способ это сделать?

function input_date($timestamp)
{
    global $vbulletin;
    $timestamp = (int)$timestamp;

    if (strlen((string)$timestamp) == 10)
    {
        $hour = 3600.00;
        $offset = $vbulletin->userinfo['timezoneoffset'];//sample -8
        $ds = (int)$vbulletin->userinfo['dstonoff'];//DST values are 1 or 0
        $fluff = $hour*($offset+5.00);
        $timestamp = $timestamp+$fluff+($ds*$hour);

        return $timestamp;//return timestamp in UTC-5 format..
    }
    else
    {
        return 0;
    }
}

1 Ответ

2 голосов
/ 02 марта 2012

Ого ... поговорим об изобретении колеса!И в области, которая, как известно, трудно получить правильные (манипуляции с датой / временем) не меньше.

Вы видели классы DateTime и DateTimeZone ?В дополнение к основам математики, они помогут вам с особыми сумасшествиями в этой сфере программирования (для каждого графства летнее время! Висок лет!).

Я должен спросить, почему вы это делаете?Временная метка UNIX по определению не зависит от часовых поясов, летнего времени и т. Д. Она определяется точно как количество секунд, прошедших с данной контрольной даты, и поток времени (несмотря на релятивистские эффекты;-) инвариантен в отношении местоположения или конкретных особенностей законодателей.

Возможно, если вы сможете более подробно описать, какова ваша реальная цель, мы могли бы предложить более последовательный подход.

...