0

以下の私のスクリプトはieで動作しますが、firefoxでは次のようになります:

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 
}
4

2 に答える 2

1

まず、投稿したコードの jsFiddle を次に示します。これにより、何が起こっているのかがわかります。

http://jsfiddle.net/HjDds/

これは動作するバージョンであることに注意してください。問題は、IE と Chrome が日付を解析する方法が異なることです。<% Now() %> がどのように返されようとも、Chrome はそれを気に入らず、新しい Date() オブジェクトを作成するときに解析できませんでした。

サーバーがクロスブラウザーで動作する形式の日付文字列を送り返していることを確認する必要があります。

私の修正に関しては(サーバー時間が必要なようなので、実際には修正ではありませんが)、servertimestring文字列内の <%= Now() %> を new Date() に置き換えることでした。たくさんのエキストラも配置されていたので、セミコロンも追加しました。

于 2012-07-16T16:58:26.513 に答える
0

無効なフォーマットデータ:2012年7月16日月曜日17:02:32

$ _SERVER ['REQUEST_TIME']を使用し、1000を掛けるPhp。

これは:

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() %>';

:)

于 2012-07-16T17:05:15.667 に答える