【问题标题】:JavaScript / YouTube and vimeo API - reconciling date formats and sortingJavaScript / YouTube 和 vimeo API - 协调日期格式和排序
【发布时间】:2013-01-05 17:25:03
【问题描述】:

我正在构建一个网页,该网页从 YouTube 和 Vimeo 中提取视频,为它们创建缩略图,然后应按日期对缩略图进行排序。我目前正在查询 vVimeo 专辑 API endpointYouTube data API - 它们都以略有不同的方式返回视频的日期。

YouTube 日期:2012-12-20T08:00:40.000Z

VIMEO 日期:2013-01-02 13:33:51

我的问题是,如何将这两种不同的格式转换为单一格式,然后我可以使用 JavaScript / jQuery 进行排序?我假设如果我设法去掉破折号、空格和冒号,删除 YouTube 日期中的“t”和“z”,我将有一个可以排序的实际数字 - 但它看起来有点笨拙,我希望有更好的方法来格式化这些。有人有什么想法吗?

【问题讨论】:

    标签: javascript jquery datetime youtube-api vimeo


    【解决方案1】:

    我会将日期转换为 Javascript Date 对象,然后从实例中 getTime() 对其进行排序。

    我们举个例子:

    var dates = [];
    dates.push(new Date('2013-01-02 13:33:51'));
    dates.push(new Date('2012-12-20T08:00:40.000Z'));
    

    现在您有了一个包含 2 个要排序的日期的数组。让我们开始吧!

    function sortByDate(a, b) {
        return a.getTime() - b.getTime();
    }
    
    dates.sort(sortByDate);
    

    如果你想要一个后代排序,只需反转 a 和 b:

    function sortByDate(a, b) {
        return b.getTime() - a.getTime();
    }
    

    在您检查您的数组是否已排序后,您可以使用console.log(dates)

    所以为了回答这个问题,你只需要将日期字符串转换成一个Date对象,然后你就可以比较排序了。

    Internet Explorer 出现问题,请检查:

    更新:

    但是,如果您打算有任何浏览器兼容性,您可以使用高级浏览器日期转换器,例如这个项目:JS Date Format

    【讨论】:

    • a.getDate() - b.getDate() 不正确。例如,代码将错误地暗示2012-01-10 大于2012-02-09。使用.getTime()
    • @SalmanA 你说得对,昨天晚上我写这段代码的时候有点累,我在测试时使用了.getTime(),我不知道我为什么要写这个例子与.getDate()。我正在比较时间戳,以确保排序正常。我当时也和 grather 一起测试过并且工作过,但这样是合乎逻辑的。
    • 抱歉 - 我没有选中这个作为正确答案,因为 Chrome 是唯一一个我可以让它工作的浏览器。
    • @mheavers 你是对的,即使 ES3 规范也可以,但 Firefox 在第一个函数中返回 NaN,我不知道 IE。但是我添加了一个项目,这次可以帮助您转换为任何浏览器。
    【解决方案2】:

    只需将日期解析为自 1970 年 1 月 1 日以来的毫秒数。这就是 JavaScript 使用的。

    【讨论】:

    • IE7(也许是 8)在这样的日期上会有问题。
    • @SalmanA,你在说什么?愿意用一个例子来解释吗?
    • 在 IE7 中,new Date('2013-01-02 13:33:51')new Date('2013-01-02') 返回 NaN。
    • @SalmanA,啊,是的,如果你真的使用 JavaScript 的日期解析器,你可能会遇到麻烦。无论如何,我从来没有运气(主要是由于奇怪的格式)并最终自己解析它。我建议 mheavers 用他的代码解析日期,并存储一个简单的整数。
    猜你喜欢
    • 2011-09-22
    • 1970-01-01
    • 2015-10-22
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多