【问题标题】:Date.js: Date.now() behaving oddlyDate.js:Date.now() 行为异常
【发布时间】:2011-09-08 14:01:52
【问题描述】:

我正在使用date.js.

time_container.innerHTML = Date.now().toString('T'); 行运行良好、短暂,现在在 Firebug 控制台中抛出错误:radix must be an integer at least 2 and no greater than 36。它肯定在早些时候工作。

注意:date.js toString() 函数使用特殊的format specifiers

var show_date = {
    setup: function() {
        setInterval(show_date.update, 5000);
    },
    update: function() {
        var date_container = app.get('js_date');
        var time_container = app.get('js_time');

        if (date_container) {
            date_container.innerHTML = Date.today().toString('dS of MMMM yyyy');
        }
        if (time_container) {
            //time_container.innerHTML = Date.now().toString('T');
            var d1 = new Date();
            time_container.innerHTML = d1.toString('T');
        }
    }
}
app.onload(show_date.setup);

app.get() 只是document.getElementById() 的快捷方式。 app.onload() 是(您可能猜到的)一个 onload 函数。

注释掉的行导致了问题。评论下方的替换行有效,但没有给出我想要的格式。 T 应该输出 h:mm:ss tt(小时、分钟、秒、上午/下午)。缺少上午/下午位。

另外,我确定Date.now() 今天早些时候还在工作。也许我会尝试使用计算机时钟来看看这是否会有所不同。

包含的 date.js 版本是 date-en-IE.js。代码中声明的日期是 2008-05-13,尽管我今天早些时候从 SVN 结帐中得到了它。

【问题讨论】:

  • 你想做什么? toString 的参数是您要编码数字的基数。例如,toString(16) 将为您提供十六进制。
  • 啊,我现在看到 date.js 有一个 toString 函数 (code.google.com/p/datejs/wiki/APIDocumentation#toString)。好吧,在我看来,如果 date.js 不起作用,您就没有正确包含它。尝试在控制台中执行Date.today,看看它会返回什么。
  • Date.today() 在控制台中返回 Date {Thu Sep 08 2011 00:00:00 GMT+0100 (GMT Daylight Time)}。而且,在同一个脚本中,date_container.innerHTML = Date.today().toString('dS of MMMM yyyy'); 工作正常。问题似乎仅限于Date.now()
  • 好吧,除非我看到您的代码,否则我无能为力。尝试用尽可能少的代码重现问题,否则只需发布您的全部内容。
  • @Xeon06。添加了更多细节。

标签: javascript date datejs


【解决方案1】:

ECMAScript 5 已经有一个 Date.now() 函数,它返回自 1970 年 1 月 1 日以来的毫秒数。您显然正在调用该版本,因此 toString('T') 调用是在一个数字上,而不是 Date 对象。 Number.prototype.toString 只能接受 2 到 36 之间的数字作为参数,这就是错误的来源。

经过一番调查,最新的 Datejs 版本似乎不再添加自己的 Date.now() 函数。也许你在工作时使用的是旧版本?

改用new Date().toString('T'),这两种方法都可以。

【讨论】:

  • 这确实有效,但第二个问题仍然存在:日期格式未正确应用。无论我打电话给T 还是h:mm:ss tt,我得到的是HH:mm:ss。但我想这是一个很好的细节,并没有太大关系。
  • @TRIG:我现在没有这部分的答案。这可能是 Datejs 中的一个错误。
【解决方案2】:

我在 FireFox 中遇到了同样的错误。 通过将 .toString() 方法更改为 .toDateString() 似乎解决了这个问题。 示例:Date.now().toDateString('M/d/yyyy HH:mm')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 2017-01-22
    • 2013-04-14
    • 2014-01-29
    • 2011-01-13
    • 2010-10-14
    • 2011-09-10
    相关资源
    最近更新 更多