2

さまざまな方法で時間を実行するためのJavaScript関数があります。Chrome ブラウザでは問題なく動作しますが、Internet Explorer では適切な値が表示されません。

Chrome の場合:

2011 年 12 月 13 日 13:14:19

IE8 の場合:

0NaN-undefined-NaN 0NaN:0NaN:0NaN

どちらのブラウザからでも、このページのリンクからこれを表示できます。ページhttp://chemfluence.org.in/monetarist/sample.phpのソースコードも見て ください。

私のコード:

 <div id="txt" title="Industries will generate products on every 3 Virtual days. 
 12 Virtual Days = 1 Real day. dd-Mon-yyyy HH:MM:SS ."></div>

Javascript

<script type='text/javascript'>//<![CDATA[ 

var virtualOrigin = Date.parse("2012-02-27T00:00:00"),
    game_start_realdate=Date.parse("2013-01-27T12:00:00"),
    realOrigin = Date.now(),
    factor = 12;

function getVirtual(time) {
    return new Date( virtualOrigin + ((time - realOrigin) * factor)  +(realOrigin-game_start_realdate)*factor);
}

function pad2(num) {
    return ("0"+num).substr(-2);
}
function format(time) {
var month=new Array();
month[0]="Jan";
month[1]="Feb";
month[2]="Mar";
month[3]="Apr";
month[4]="May";
month[5]="Jun";
month[6]="Jul";
month[7]="Aug";
month[8]="Sep";
month[9]="Oct";
month[10]="Nov";
month[11]="Dec";
     return pad2(time.getDate())
        + "-" + month[time.getMonth()]
        + "-" + time.getFullYear()
        + " " + pad2(time.getHours())
        + ":" + pad2(time.getMinutes())
        + ":" + pad2(time.getSeconds());
}

function startTime() {
    var now = new Date();
    var display = getVirtual(now);
    output.innerText = format(display);
    setTimeout(startTime, 1000/factor - (now.getMilliseconds() % (1000/factor)));
}

var output = document.getElementById("txt");
startTime();

</script>

Internet Explorer および Chrome/Firefox で動作するように上記の Javascript を変更する必要があります。 修正したコードを教えてください。

4

2 に答える 2

3

moment.js を使用してみてください。これはクロス ブラウザーであり、javascript で日付を入力する手間が大幅に軽減されます。ドキュメントは非常に詳細です。http://momentjs.com/docs/

日付を次のようにフォーマットできます。

var day = moment("12-25-1995", "MM-DD-YYYY");

http://momentjs.com/docs/#/parsing/string-format/

アップデート

これが完全な使用例です。

var mysql_date = '2013-01-25 10:00:00'; // Date from MySQL database

/**
 * @param     string     mysql_data     Date string
 * @param     string     format         Format in which mysql_data is set
 */
var date = moment(mysql_date , 'YYYY-MM-DD HH:mm:ss'); // new moment.js object.

// To display the date in a different format use:
var date_format1 = date.format('MMM, Do'); // Format here would be Jan, 25th
var date_format2 = date.format('MMMM, Do, YYYY'); // January, 25th, 2013

console.log(date_format1, date_format2);

フォーマットはいつでも変更できます。再度作成する必要はありません。

于 2013-01-21T05:14:35.053 に答える
2

カスタム解析関数を使用して、ブラウザーが何であれ、その日付形式を解析できることを確認します。

function parse(datestring){
    var timearray = datestring.split(/[\-T\:]/g)
    return +new Date(+timearray[0],timearray[1]-1,+timearray[2],+timearray[3],+timearray[4],+timearray[5])
}

そして、負の値pad2を使用しないことで、関数が IE8 で動作するように修正します。substr

function pad2(num) {
    return ("0"+num).slice(-2);
}

それはそれを行う必要があります。

于 2013-01-25T22:39:07.060 に答える