Проблема с функцией даты Javascript в IE 7, возвращает NaN - PullRequest
18 голосов
/ 14 июля 2010

У меня есть твиттер, и я создаю новую дату в формате obj, чтобы я мог отформатировать дату по своему вкусу.

var created = new Date(this.created_at) работает в Firefox и Chrome, но не в IE7. У меня проблемы с передачей даты через функцию new Date(). Он просто возвращает неопределенное и 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>

Ответы [ 3 ]

17 голосов
/ 14 июля 2010

Вы хотите убедиться, что дата анализируется как 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"));
  } 
});
3 голосов
/ 31 декабря 2010

Я обнаружил, что плагин глобализации jQuery работает лучше всего. Другие методы имели проблемы с кроссбраузерностью, и такие вещи, как date.js, давно не обновлялись.

Вам также не нужен указатель даты на странице. Вы можете просто вызвать что-то похожее на пример, приведенный в документации:

$.parseDate('yy-mm-dd', '2007-01-26');
1 голос
/ 25 апреля 2012

Вот что я сделал, чтобы исправить это!

$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();
}

И это дает мне «19:38 23 апреля 2012 года» в Chrome, IE и Firefox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...