2012-07-16 52 views
0

我下面即但在Firefox作品的脚本,我得到:日期和时间脚本 - 即VS FF

Mon, July 16th 2012 //this is ok 

NaN:NaN:NaN (UTC +2) //but the time??? 

...

var weekdaystxt = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; 

function showLocalTime(container, servermode, offsetMinutes, displayversion) { 
    if (!document.getElementById || !document.getElementById(container)) return 
    this.container = document.getElementById(container) 
    this.displayversion = displayversion 
    var servertimestring = (servermode == "server-php") ? '<? print date("D, F jS Y H:i:s", time())?>' : (servermode == "server-ssi") ? '<!--#config timefmt="%B %d, %Y %H:%M:%S"--><!--#echo var="DATE_LOCAL" -->' : '<%= Now() %>' 
    this.localtime = this.serverdate = new Date(servertimestring) 
    this.localtime.setTime(this.serverdate.getTime() + offsetMinutes * 60 * 1000) //add user offset to server time 
    this.updateTime() 
    this.updateContainer() 
} 
showLocalTime.prototype.updateTime = function() { 
    var thisobj = this 
    this.localtime.setSeconds(this.localtime.getSeconds() + 1) 
    setTimeout(function() { 
     thisobj.updateTime() 
    }, 1000) //update time every second 
} 
showLocalTime.prototype.updateContainer = function() { 
    var thisobj = this 
    if (this.displayversion == "long") this.container.innerHTML = '<? print date("D, F jS Y")?>' 
    else { 
     var hour = this.localtime.getHours() 
     var minutes = this.localtime.getMinutes() 
     var seconds = this.localtime.getSeconds() 
     var ampm = (hour >= 12) ? "PM" : "AM" 
     var dayofweek = weekdaystxt[this.localtime.getDay()] 
     this.container.innerHTML = formatField(hour, 1) + ":" + formatField(minutes) + ":" + formatField(seconds) + " (UTC +2)" 
    } 
    setTimeout(function() { 
     thisobj.updateContainer() 
    }, 1000) //update container every second 
} 

function formatField(num, isHour) { 
    if (typeof isHour != "undefined") { //if this is the hour field 
     var hour = (num > 24) ? num - 24 : num 
     return (hour == 0) ? 24 : hour 
    } 
    return (num <= 9) ? "0" + num : num //if this is minute or sec field 
} 
+2

除了他已经动态生成从PHP生成的JS(bleuch) – Alnitak 2012-07-16 16:38:01

+0

@Truth只要解决方案正确我接受...如果留在中间我不能.. :)所以我应该改变日期和时间的代码? – Pavlos1316 2012-07-16 16:40:29

+1

如果你给我一个电子邮件地址,我可以给你发一大堆分号。我有很多额外的东西,我可能永远不会使用。 – Pointy 2012-07-16 16:43:18

回答

1

首先,这里的代码的的jsfiddle你张贴所以大家都看到发生了什么事情 -

​​

请注意,这是一个工作版本。问题在于IE和Chrome解析日期的方式不同。无论什么<%Now()%>都回来了,Chrome不喜欢它,并且在创建新的Date()对象时无法解析。

您将需要确保您的服务器发回的日期字符串的格式将工作交叉浏览器。

至于我的修复(虽然它不是一个真正的修复,因为你似乎想要服务器时间)是用新的Date()替换你的servertimestring字符串中的<%= Now()%>。我还加了分号,因为我还有一堆附加费用。

0

格式无效数据:周一,2012年7月16日17时02分32秒

PHP中使用$ _ SERVER [ 'REQUEST_TIME']和1000

这将乘:

var servertimestring = (servermode == "server-php") ? '<?php echo $_SERVER['REQUEST_TIME']*1000;?>' : (servermode == "server-ssi") ? '<!--#config timefmt="%B %d, %Y %H:%M:%S"--><!--#echo var="DATE_LOCAL" -->' : '<%= Now() %>'; 

:)