Javascript / jQuery自动设置和更新时间

时间:2014-11-12 11:38:08

标签: javascript php jquery html

我在Javascript中创建了一个updateTime()函数,该函数在localhost中正常工作但在server

中没有效果

fiddle

HTML / PHP:

<?php
    date_default_timezone_set('Asia/Tehran');
    $datestr = strtotime('now');
    $date = date("y/m/d H:i",$datestr);
?>
<span class="TA" title="<?php echo $date ?>" info="<?php echo $datestr ?>"></span>

JS:

$(document).ready(function(e) {
    $('.TA').each(function() {      
          var time = $(this).attr('info');
          updateTime(this,time);      
    });
    setInterval(function(){
        $('.TA').each(function(index,el){  
            var time = $(el).attr('info');
            updateTime(el,time);
        });
    },15000);
});
function updateTime(el,time){
    var strTime = time;
    var nowStr = Date.now()/1000;
    var mins =  parseInt(nowStr) - parseInt(strTime);
    var re = '';

    if(mins>=0 && mins <86400)
    {
        if(mins>=0 && mins <60)
        re = 'just now';
        else
        if(mins>=60 && mins<3600)
        {
            mins = Math.floor(mins/60);
            mins = mins == 1 ? 'a':mins;
            re = mins+' min'+(mins>1 ?'s':'')+' ago';   
        }else
        if(mins>=3600 && mins<86400)
        {
            var h = Math.floor(mins/3600);
            h = h == 1 ? 'an':h;
            re = h+' hour'+(h>1 ?'s':'')+' ago';
        }
        $(el).text(re);
    }else
    $(el).text($(el).attr('title')); 
 }

实际上strtotime('now');localhost中的server之间存在差异。

我该如何改善这个问题?提前致谢 。

2 个答案:

答案 0 :(得分:1)

您可以使用JSON [P]并访问时间API:

(下面的代码应该可以正常工作,只需测试它......)

 function getTime(zone, success) {
     var url = 'http://json-time.appspot.com/time.json?tz=' + zone,
         ud = 'json' + (+new Date());
     window[ud]= function(o){
         success && success(new Date(o.datetime));
     };
     document.getElementsByTagName('head')[0].appendChild((function(){
         var s = document.createElement('script');
         s.type = 'text/javascript';
         s.src = url + '&callback=' + ud;
         return s;
     })());
 }

 getTime('GMT', function(time){
     // This is where you do whatever you want with the time:
     alert(time);
 });

如果你想通过php获取它:

 $usersTimezone = 'Asia/Tehran';
 $date = new DateTime( 'Thu, 31 Mar 2011 02:05:59 GMT', new DateTimeZone($usersTimezone) );
 echo $date->format('y/m/d H:i');

答案 1 :(得分:1)

它可能在本地工作,因为您的浏览器和localhost是同一台机器,但服务器不是,不同机器上的时间可能不同。

客户端计算机上的时间由javascript使用,但info属性中的时间由服务器设置。要解决此问题,请仅使用客户端时间(例如,在页面加载时使用javascript设置info属性)或使用KaMZaTa为客户端和服务器提及的时间API。