【问题标题】:How to convert time / date with jquery/javascript?如何使用 jquery/javascript 转换时间/日期?
【发布时间】:2011-06-07 21:18:34
【问题描述】:

我现在有这个

last_modified = xhr.getResponseHeader('Last-Modified');

/* Last-Modified: Wed, 06 Apr 2011 20:47:09 GMT */

但是,对于timeago 插件,我需要这种格式

<abbr class="timeago" title="2008-07-17T09:24:17Z">July 17, 2008</abbr>

什么是最简单和防弹的转换方式?

【问题讨论】:

    标签: javascript jquery time


    【解决方案1】:

    使用 javascript 尝试如下:

    对于标题部分:

        var dateObj = new Date(last_modified);
        var newDate = dateObj .getFullYear() + "-" + dateObj.getMonth() + "-" + dateObj.getDate() + "T" + dateObj.getHours() + ":" + dateObj.getMinutes() + ":" + dateObj.getSeconds() + "Z"; 
    

    对于“2008 年 7 月 17 日”部分:

        var m_names = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
        var dateObj = new Date(last_modified);
        var anotherDate = m_names[dateObj.getMonth()] + " " + dateObj.getDate() + ", " + dateObj.getFullYear(); 
    

    【讨论】:

    • 看起来我忽略了原生 js Date 对象的一些非常酷的字符串解析能力。我认为有一组相当有限的“已知”字符串格式被接受为构造函数参数。不错
    • Pedant 提示:这很不方便,但不幸的是,ECMAScript 不保证日期解析器能够解析 Last-Modified 使用的 RFC822 格式的日期。它确实适用于所有现代浏览器,但您可能会被更晦涩的平台所吸引。
    • @Rob:ECMAScript 标准中要求接受的字符串格式非常有限,几乎到了完全无用的地步。实际上,浏览器实现的功能远远超出了标准的要求,尽管它们所做和不允许的具体内容是可变的且定义不明确,这使得使用日期解析非常痛苦,以至于您经常最终自己(或使用库) ) 无论如何。
    • @Hasan Fahim - 在日期到字符串的第一次转换中,月份需要为 +1。另外,不要假设 UT。
    【解决方案2】:

    看看date.js。可能比你需要的多一点,但它是一个很棒的库。代码应该类似于:

    last_modified = xhr.getResponseHeader('Last-Modified');
    last_modified_date = last_modified.split(': ')[1];
    date = Date.parse(last_modified_date);
    date.toString("yyyy-MM-ddTHH:mm:ssZ")
    

    编辑: @Hasan 指出本机 Date 对象能够解析标题文本。对于这个简单的任务,这可能是最好的选择。

    【讨论】:

      【解决方案3】:
      // Some browsers can natively return an ISO date string, but a lot cannot.
      // And some insist on adding the milliseconds to the string-
      // '2011-04-06T20:47:09.000Z'
      
          function isoString(date){
              var A, T, D= new Date(date);
              if(D){
              // uncomment next line if you allow msecs in string
              // if(D.toISOString) return D.toISOString();
                  A= [D.getUTCFullYear(), D.getUTCMonth(), D.getUTCDate(),
                  D.getUTCHours(), D.getUTCMinutes(), D.getUTCSeconds()];
                  A[1]+= 1;
                  for(var i= 0; i<6; i++)
                  if(A[i]<10) A[i]= '0'+A[i];
                  T= A.splice(3, A.length);
                  return A.join("-")+("T" + T.join(":")+ "Z");
              }
              // throw 'bad date';
          }
      

      var str='2011 年 4 月 6 日星期三 20:47:09 GMT';

      isoString(str) 返回值:(字符串)2011-04-06T20:47:09Z

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-18
        相关资源
        最近更新 更多