【问题标题】:Transpose php datetime+timezone function into js function将php datetime+timezone函数转为js函数
【发布时间】:2012-04-03 17:18:38
【问题描述】:

这是我的解决方案中的一个有用功能

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) {
        // http://stackoverflow.com/questions/5324178/javascript-date-parsing-on-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 %}
    });

您不知道如何通过在第二个参数中传递字符串“America/New_York”或“Europe/Paris”在 JS 中轻松实现时区 gestion?

非常感谢!!

【问题讨论】:

    标签: php javascript datetime date timezone


    【解决方案1】:

    首先,您能否将 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) 
    

    【讨论】:

    • 可能不是解决这个问题的最佳方法......基本上你需要 timeStamp 成为一些 gmt 时间戳
    猜你喜欢
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    相关资源
    最近更新 更多