2

我有一个 javascript 函数以不同的方式运行时间。它在 Chrome 浏览器中运行良好,但在 Internet Explorer 中没有显示出适当的价值。

在 Chrome 中:

2011 年 12 月 13 日 13:14:19

在 IE8 中:

0NaN-未定义-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>

我需要修改上述 Javascript 以在 Internet Explorer 和 Chrome/Firefox 中工作; 请给我修改后的代码;

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 回答