2012-04-03 82 views
0

这里是一个有用的功能,我在我的解决方案移调PHP的日期时间+时区功能为js函数

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 %} 
    }); 

你对如何在JS轻易地实现了时区GESTION联合国想法通过将字符串“ America/New_York'或'Europe/Paris'的第二个参数?

非常感谢!

回答

0

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

可能不是最好的方式去做这件事......基本上你需要时间戳来做一些时间戳 – Parris 2012-04-03 19:34:55