日期在Titanium Mobile中无法正确比较

时间:2011-09-17 21:14:02

标签: javascript datetime titanium titanium-mobile

请使用以下代码:

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/)中,它会发出警告。在Titanium Mobile中,它会发出0或0的警报。为什么是这样?我无法以与源不同的格式获取日期。

1 个答案:

答案 0 :(得分:1)

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

如果您查找Date对象的规范,它需要RFC 1123中定义的日期,它从RFC 822得到它的日期定义,这对我来说并不像我支持你的确切格式'正在使用。从Javascript 1.8.5开始,它还接受ISO 8601形式的日期,看起来它可能涵盖您拥有的内容。

如果可以的话,我建议修改日期字符串以使其像旧规范一样工作。有关详细信息,请参阅here on 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();

然后,您可以使用now对象上的任何methods defined for the Date object,包含获取日期任何部分的方法或将其转换为字符串等等。

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

now.toUTCString();