我在Javascript中创建了一个updateTime()
函数,它在localhost
中工作良好,但在server
中不工作
小提琴
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'));
}
事实上CCD_ 5和CCD_ 6中的CCD_。
我该如何改进这个问题?提前谢谢。
您可以使用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');
它可能在本地工作,因为浏览器和localhost是同一台机器,但服务器不是,不同机器上的时间可能不同。
javascript使用客户端机器上的时间,但info属性中的时间由服务器设置。为了克服这个问题,只使用客户端时间(例如,当页面加载时使用javascript设置信息属性),或者使用KaMZaTa提到的客户端和服务器的时间API。