【问题标题】:Problem with Javascript Date function in IE 7, returns NaNIE 7 中的 Javascript 日期函数出现问题,返回 NaN
【发布时间】:2011-03-15 16:28:12
【问题描述】:

我有一个 twitter 提要,我创建了一个新的日期 obj,以便我可以根据自己的喜好格式化日期。

var created = new Date(this.created_at) 在 Firefox 和 chrome 中有效,但在 IE7 中无效。我似乎无法通过new Date() 函数传递日期。它只是返回 undefined 和 NaN。

这里是代码。如果您尝试对其进行测试,请不要忘记包含 jquery。谢谢。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Twitter Test</title>
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript" >

$(function(){
$.getJSON("http://twitter.com/statuses/user_timeline/google.json?count=1&callback=?", function(data){
    $.each(data, function(){
        var created = new Date(this.created_at)
        $("<div></div>").append("<ul><li>Unformatted: " + this.created_at + "</li><li>Formatted: " + created + "</li></ul>").appendTo("body")
    });

})  

})

</script>
</head>

<body>
</body>
</html>

【问题讨论】:

    标签: javascript jquery json date twitter


    【解决方案1】:

    这是我为纠正这个问题所做的!

    $tweetList.append('<p><span class="twitterdate">' + parseTwitterDate(item.created_at) + location + '</span></p>');
    
    var month=new Array();
    month[0]="January";
    month[1]="February";
    month[2]="March";
    month[3]="April";
    month[4]="May";
    month[5]="June";
    month[6]="July";
    month[7]="August";
    month[8]="September";
    month[9]="October";
    month[10]="November";
    month[11]="December";
    
    function parseTwitterDate($stamp) {
        var v=$stamp.split(' ');
        var date = new Date(Date.parse(v[1]+" "+v[2]+", "+v[5]+" "+v[3]+" UTC"));
        var hour = date.getHours();
        var ampm = hour<12 ? ' AM' : ' PM';
        return date.getHours() +':'+ date.getMinutes() +' '+ ampm +' '+ date.getDate() +' '+ month[date.getMonth()] +' '+ date.getFullYear();
    }
    

    这在 Chrome、IE 和 Firefox 上给我“2012 年 4 月 23 日晚上 19​​:38”。

    【讨论】:

      【解决方案2】:

      我发现jQuery Globalization Plugin 日期解析效果最好。其他方法存在跨浏览器问题,并且 date.js 之类的东西已经有一段时间没有更新了。

      您也不需要页面上的 datePicker。您可以调用类似于文档中给出的示例的内容:

      $.parseDate('yy-mm-dd', '2007-01-26');
      

      【讨论】:

      • 这对日期很有用,但不解析时间。
      【解决方案3】:

      您需要确保将日期解析为 UTC,否则 javascript 会将其解释为您当地时区的日期。

      日期如下所示:Tue Jul 13 23:18:36 +0000 2010

      你可以这样解析:

      function parseDate(str) {
        var v=str.split(' ');
        return new Date(Date.parse(v[1]+" "+v[2]+", "+v[5]+" "+v[3]+" UTC"));
      } 
      

      这将在当地时区给出正确的日期/时间,例如:Tue Jul 13 2010 19:18:36 GMT-0400 (EDT)

      所以你的代码应该看起来像这样:

      $(function(){
        $.getJSON("http://twitter.com/statuses/user_timeline/google.json?count=1&callback=?", function(data){
          $.each(data, function(){
            var created = parseDate(this.created_at);
            $("<div></div>").append("<ul><li>Unformatted: " + this.created_at + "</li><li>Formatted: " + created + "</li></ul>").appendTo("body");
          });
        });
        function parseDate(str) {
          var v=str.split(' ');
          return new Date(Date.parse(v[1]+" "+v[2]+", "+v[5]+" "+v[3]+" UTC"));
        } 
      });
      

      【讨论】:

      • 谢谢。这很好用。我还在学习。所以如果我理解正确。您创建了一个名为 parseDate 的新函数,并将日期字符串传递给该函数,并通过在有空格的地方拆分它来创建一个新数组。然后你以适当的格式重新组织它。另外,我是这个网站的新手。那么我该怎么做才能给你代表点数呢?
      • 是的,就是这样。最后添加“UTC”或“GMT”也很重要;没有那个 js 将假定它是用户本地时区的时间(当然不是;twitter 的服务器不一定知道用户所在的时区)。您可以单击我对 +1 我的回答旁边的 0 上方的三角形,但我认为您需要创建一个帐户才能做到这一点。 :)
      • 你把这种格式叫做什么? (2010 年 7 月 13 日星期二 23:18:36 +0000)
      • @brad - 据我所知,什么都没有……这一年在时区之后;我不认为有任何这样的标准化格式。不过,如果我错了,请有人纠正我。
      • @no 我不这么认为,但我想至少尝试找出答案。推特使用这种非标准格式有点奇怪。感谢您的帮助。
      猜你喜欢
      • 2013-10-07
      • 1970-01-01
      • 2012-11-25
      • 2023-03-11
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      相关资源
      最近更新 更多