2010-10-29 4 views
3

Je veux convertir une chaîne de date à un objet de date dans jQuery, et le code ci-dessous fonctionne bien pour Chrome et Firefox, mais pas dans Internet Explorer:Convertir une chaîne à ce jour dans jQuery et Internet Explorer?

<script type="text/javascript" charset="utf-8"> 
//Validate if the followup date is now or passed: 
    jQuery.noConflict(); 
    var now = new Date(); 
    jQuery(".FollowUpDate").each(function() { 
     if (jQuery(this).text().trim() != "") { 
      var followupDate = new Date(jQuery(this).text().trim()); //Here's the problem 
      alert(followupDate); 
      if (followupDate <= now) { 
       jQuery(this).removeClass('current'); 
       jQuery(this).addClass('late'); 
      } 
      else { 
       jQuery(this).removeClass('late'); 
       jQuery(this).addClass('current'); 
      } 
     } 
    }); 
</script> 

L'alerte est seulement là pour les tests, et Chrome et Firefox il renvoie un objet date, mais dans IE je reçois NaN.

Qu'est-ce qui ne va pas, et comment puis-je faire cette conversion pour qu'elle fonctionne également dans IE?

Répondre

6

Cette question m'a aidé à trouver une solution à un problème de conversion de dates. J'ai trouvé un moyen de convertir la date sans utiliser de scripts séparés ou de tester le type de navigateur.

Le code ci-dessous accepte une date dans le format 2011-01-01 (année, mois, jour).

function convertDate(stringdate) 
{ 
    // Internet Explorer does not like dashes in dates when converting, 
    // so lets use a regular expression to get the year, month, and day 
    var DateRegex = /([^-]*)-([^-]*)-([^-]*)/; 
    var DateRegexResult = stringdate.match(DateRegex); 
    var DateResult; 
    var StringDateResult = ""; 

    // try creating a new date in a format that both Firefox and Internet Explorer understand 
    try 
    { 
     DateResult = new Date(DateRegexResult[2]+"/"+DateRegexResult[3]+"/"+DateRegexResult[1]); 
    } 
    // if there is an error, catch it and try to set the date result using a simple conversion 
    catch(err) 
    { 
     DateResult = new Date(stringdate); 
    } 

    // format the date properly for viewing 
    StringDateResult = (DateResult.getMonth()+1)+"/"+(DateResult.getDate()+1)+"/"+(DateResult.getFullYear()); 

    return StringDateResult; 
} 

Hope that helps!

+0

Ceci est une sorte de vieux maintenant, et j'ai déménagé :-) mais merci quand même, je vais essayer un jour! – Anders

+0

cela fonctionne essentiellement. Maintenant disons que j'ai deux vars avec la valeur retournée de celui-ci .... peuvent-ils être déduits l'un de l'autre? – WilfredMifsud

+0

Ils ne peuvent probablement pas être déduits l'un de l'autre s'ils sont renvoyés par cette fonction car la fonction renvoie une chaîne. Je recommande de faire des calculs sur les dates avant d'appeler cette fonction. –

1

Si c'est une chaîne qui ressemble à une date, utilisez ceci.

var followupDate = new Date(Date.Parse(jQuery(this).text().trim())); 

Je suppose une question que je aurais dû demander est, quelle est la sortie de

jQuery(this).text().trim() 

?

+0

Malheureusement, cela m'a donné exactement le même résultat (NaN). La sortie de jQuery (this) .text(). Trim() est le contenu d'une cellule de tableau, qui est une chaîne de date au format de date suédois ("2010-10-30"). Firefox et Chrome n'a aucun problème avec ceci et le transforme immédiatement en objet de date, mais IE ne semble pas le reconnaître ou quelque chose ... – Anders

1

I figured it out: IE n'a apparemment pas accepté le format de date suédoise, alors je l'ai une chaîne à remplacer un format qu'il a accepté:

var followupDate = new Date (datestring.replace ('-', '/'));

Malheureusement ce format n'a pas été accepté par Firefox, j'ai donc dû conserver le code original pour Chrome et Firefox, puis utiliser un script séparé pour IE avec des commentaires conditionnels.

+0

ou utilise isNan (date) conditionnel pour séparer les navigateurs ie/other –

1

Je ne l'ai pas testé, mais que diriez-vous:

var followupdate = new Date(jQuery(this).text().trim().toString()); 

Le « toString() » devrait le forcer à être interprété comme une chaîne; l'objet Date doit accepter la chaîne comme entrée valide, et cela peut empêcher l'IE de s'afficher dessus.

0

J'utilise actuellement comme ceci:

new Date(moment(item.ToDate)); 

Works avec des dates suédoises et '05/01/2013':

new Date(moment('2013-01-05')); 
Questions connexes