Транспонировать функцию php datetime + timezone в функцию js - PullRequest
0 голосов
/ 03 апреля 2012

вот полезная функция, которую я имею в своем решении

public static function formatTime($time, $timezone)
{
    $timezone = new \DateTimeZone($timezone);
    $time = $time->setTimezone($timezone);
    return \Locale::getDefault() == 'fr' ? date('H:i', $time->getTimestamp() + $time->getOffset()) : date('g:i a', $time->getTimestamp() + $time->getOffset());
}

Я храню свои даты в UTC для своих предметов, и контейнер этих предметов имеет определенный часовой пояс. С помощью этой функции я применяю часовой пояс ко всем своим элементам.

Теперь мне нужно «перевести» эту функцию в JS, выполняющую точно так же (на самом деле, мои элементы загружаются PHP, но затем новые элементы поступают непосредственно из JS, и необходимо самому применить эту же функцию в JS).

В настоящее время у меня есть этот (предыдущий, без учета часового пояса, к сожалению):

        Twig.setFunction('format_time', function(value) {
        // /5144653/razbor-daty-javascript-na-iphone
        var arr = value.date.split(/[- :]/);
        var d = new Date(arr[0], arr[1]-1, arr[2], arr[3], arr[4], arr[5]);

        {% if app.request.getLocale() == "fr" %}
            return (d.getHours() < 10 ? '0' + d.getHours() : d.getHours()) + ':' + (d.getMinutes() < 10 ? '0' + d.getMinutes() : d.getMinutes());
        {% else %}
            if (d.getHours() >= 12) {
                var hour = d.getHours() - 12;
                hour = hour < 10 ? '0' + hour : hour;
                var a = 'pm';
            } else {
                var hour = d.getHours();
                hour = hour < 10 ? '0' + hour : hour;
                var a = 'am';
            }
            return hour + ':' + (d.getMinutes() < 10 ? '0' + d.getMinutes() : d.getMinutes()) + ' ' + a;
        {% endif %}
    });

Вы не представляете, как легко реализовать введение часового пояса в JS, передав строку 'America / New_York' или 'Europe / Paris' во втором аргументе?

Большое спасибо !!

1 Ответ

0 голосов
/ 03 апреля 2012

Во-первых, можете ли вы передавать даты GMT своему JS вместо всех этих разных часовых поясов? Если это так, то вы можете найти часовой пояс пользователя в js.

var timeStamp = <?php echo strtotime($some_gmt_date_string); ?>  
//offset in minutes  
var offset = (new Date()).getTimezoneOffset();   
// timeStamp to milliseconds, offset to seconds to minutes  
var d = new Date(timeStamp*1000 - offset*60000);

Пример:

//current time is 12:13
var timeStamp = 1333480422; //now in gmt time   
var offset = (new Date()).getTimezoneOffset(); //420, pacific time  
var d = new Date(timeStamp*1000 - offset*60000);  
return d; //Tue Apr 03 2012 05:13:42 GMT-0700 (Pacific Daylight Time) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...