【问题标题】:Dates don't compare correctly in Titanium MobileTitanium Mobile 中的日期比较不正确
【发布时间】:2011-09-17 21:14:02
【问题描述】:

取以下代码:

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 或错误。为什么是这样?我无法从源中获取不同格式的日期。

【问题讨论】:

    标签: javascript datetime titanium titanium-mobile


    【解决方案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();
    

    【讨论】:

    • 如何修改日期字符串以像旧规范一样工作?我可以在解析它们之前在 javascript 中执行此操作吗?我从无法控制的外部来源获取日期。
    • 我的方向和你一样——只是在我的答案中添加了一个简单的转换例程——在你问之前就在研究它。
    • 似乎可以工作,只要我不将 ConvertDate 输出放入 new Date(output)
    • 我修复了代码中的一个问题(月差一)。确保获得当前版本。
    • 啊,没注意到!感谢修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 2019-03-06
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多