2017-10-12 1 views
1

J'utilisais une fonction JS pour déclarer une date var qui était le premier jour disponible du mois suivant. c'est-à-dire que le jour serait le 11/01/2017 (mm/jj/aaaa). La fonction fonctionnait parfaitement, mais IE 11+ ne la prendrait pas, et ajouterait à la place des fonctions supplémentaires que le formulaire rejetterait comme n'étant pas une date valide, mais dans Chrome, cela fonctionnait parfaitement.ToLocaleDateString() contournement pour IE et Chrome

Ive a changé le code à la suivante, qui fonctionne sur les navigateurs ..

//Calculate and assign next available 1st day of the month 
var date = new Date(); 
firstDay = new Date(date.getFullYear(), date.getMonth()+1, 1); 
firstDay = (new Date(firstDay).toLocaleString('en-US').replace(/[^ -~]/g,'')); 

mais la sortie est: 11/1/2017,%2012:00:00%20AM... ce qui est fonctionnellement correct que mon formulaire ramasse la partie "11/1/2017 ", et ignore le reste, à la fois sur IE & Chrome, mais comment puis-je changer le code ci-dessus afin qu'il supprime simplement le" ,%2012:00:00%20AM "? C'est juste un souci de rangement l'URL qui passe le long de données utilisateur

+0

Je ne comprend pas vous voulez juste montrer 11/1/2017? S'il est supposé être utilisé comme une chaîne, votre variable firstDay doit-elle être une Date pour une raison quelconque? Vous pouvez simplement écrire firstDay = date.getDate() + '/' + (date.getMonth() + 1) '/' + date.getFullYear(). Ou tu veux quelque chose d'autre? –

+0

Ou peut-être même firstDay = (new Date (firstDay) .toLocaleString ('en-US')). Sous-chaîne (0, 10); –

Répondre

3

Date.toLocaleString accepte un option paramètre permettant de déclarer comment vous voulez votre sortie.

Dans votre cas, vous aurez envie {day: 'numeric', month:'numeric', year:'numeric'}:

var date = new Date(); 
 
firstDay = new Date(date.getFullYear(), date.getMonth() + 1, 1); 
 
firstDay = new Date(firstDay).toLocaleString('en-US', { 
 
     day: 'numeric', 
 
     month: 'numeric', 
 
     year: 'numeric' 
 
    }).replace(/[^ -~]/g,''); 
 
console.log(firstDay);
(qui sera effectivement le même que Date.toLocaleDateString sans options)

+0

Fonctionne parfaitement, mais IE ne le prendra pas, im obtenir une sortie à l'écran: Invalide GET Data, c'est le problème initial que j'avais avec ma dernière fonction, = 11/1/2017 .. si vous copiez coller cette date, theres un caractère invisible avant le '=', j'ai remarqué parce que je dois toujours revenir en arrière deux fois dans l'URL, et même sur cette boîte de commentaire, est-il possible d'ajouter le .replace à l'extrait de code ci-dessus? – sanitizer

+0

@sanitizer bien sûr, je l'ai ajouté en arrière, je n'étais pas sûr de ce qu'il a fait et je n'ai pas un IE sous les mains pour éprouver ce problème. – Kaiido

+2

Parlez-moi de ça .. IE est une douleur. En outre, l'ajout de .replace a trié le problème et l'extrait de code ci-dessus fonctionne parfaitement sur Chrome et IE! Merci – sanitizer

1

vous pouvez utiliser toLocaleDateString, cela vous donnera juste la partie date au format locale.

var d = new Date(); 
 

 
console.log(d.toLocaleDateString("en-US"));

1

Vous pouvez soit utiliser

firstDay = date.getDate() + '/' + (date.getMonth() + 1) '/' + date.getFullYear(). 

Ou

firstDay = new Date(firstDay).toLocaleString('en-US')