0

采取以下代码:

var first = new Date("2011-09-17T15:12:04.331Z");
var second = new Date("2011-09-17T19:55:19.269Z");
alert(first < second);

在浏览器 ( http://jsfiddle.net/fdqjs/0/ ) 中,它会提示 true。在 Titanium Mobile 中,它会提示 0 或错误。为什么是这样?我无法从源中获取不同格式的日期。

4

1 回答 1

1

我的猜测是 Titanium Mobile 没有运行足够新的 Javascript 版本来覆盖您使用的日期格式。

如果您查看 Date 对象的规范,它会采用RFC 1123中定义的日期,该日期从RFC 822获取日期定义,在我看来,它不支持您使用的确切格式。从 Javascript 1.8.5 开始,它还接受ISO 8601形式的日期,看起来它可能涵盖了您所拥有的内容。

如果可以的话,我建议修改您的日期字符串以像旧规范一样工作。有关更多信息,请参见MDN 上的此处。

一个有效的 RFC822 日期时间示例如下:

02 Oct 2002 15:00:00 +0200

如果您的日期始终与您在问题中显示的格式完全相同,那么您可以进行如下简单的转换:

function ConvertDate(dateIn) {
    var monthStr = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
    // desired format "02 Oct 2002 15:00:00 +0200"
    var dateOut = dateIn;
    var matches = dateIn.match(/(\d+)\D+(\d+)\D+(\d+)T(.*)Z$/);
    if (matches) {
        dateOut = matches[3] + " " + 
            monthStr[parseInt(matches[2] - 1, 10)] + " " + 
            matches[1] + " " + 
            matches[4] + " GMT";
    }
    return(dateOut);
}

在这里演示:http: //jsfiddle.net/jfriend00/APxN7/

注意:这个简单的函数假定您的日期始终采用您在问题中显示的确切格式并且始终有效,因为它不会处理任何任意 ISO 8601 日期作为输入,而只会处理您显示的格式。

要将当前日期转换为 javascript 对象,您可以这样做:

var now = Date();

然后,您可以使用为对象上的 Date 对象定义的任何方法now,包括获取日期的任何部分或将其转换为字符串的方法等......

要获取 ConvertDate 输出日期的互联网形式,您可以使用:

now.toUTCString();
于 2011-09-17T21:52:37.083 回答