Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SIMPLEDATEFORMAT SIMILAIRE À LA CLASSE JAVA


Information sur la source

Catégorie :Date & Heure Classé sous : date, formater, parser, format, parse Niveau : Expert Date de création : 22/11/2006 Date de mise à jour : 22/11/2006 12:22:01 Vu / téléchargé: 10 149 / 210

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
SimpleDateFormat similaire à la classe Java.
(http://java.sun.com/j2se/1.5.0/docs/api/index.html?java/text/SimpleDateFormat.html)

Permet de parser ou de formater une date à l'aide d'un pattern.
Langues prises en compte:  ca, da, de, en, es, et, fi, fr, is, it, nl, no, pt, sl, sv

Pattern letters:

--------------------------------------------------------------------
| Lettre | Date ou heure .......... | Présentation | Exemples .... |  
--------------------------------------------------------------------
| y .... | Year ................... | Year ....... | 1996; 96 .... |
| M .... | Month in year .......... | Month ...... | July; Jul; 07 |
| w .... | Week in year ........... | Number ..... | 27 .......... |
| W .... | Week in month .......... | Number ..... | 2 ........... |
| D .... | Day in year ............ | Number ..... | 189 ......... |
| d .... | Day in month ........... | Number ..... | 10 .......... |
| F .... | Day of week in month ... | Number ..... | 2 ........... |
| E .... | Day in week ............ | Text ....... | Tuesday; Tue. |
| a .... | Am/pm marker ........... | Text ....... | PM .......... |
| H .... | Hour in day (0-23) ..... | Number ..... | 0 ........... |
| k .... | Hour in day (1-24) ..... | Number ..... | 24 .......... |
| K .... | Hour in am/pm (0-11) ... | Number ..... | 0 ........... |
| h .... | Hour in am/pm (1-12) ... | Number ..... | 12 .......... |
| m .... | Minute in hour ......... | Number ..... | 30 .......... |
| s .... | Second in minute ....... | Number ..... | 55 .......... |
| S .... | Millisecond ............ | Number ..... | 978 ......... |
--------------------------------------------------------------------

Exemples:
---------

var sdf = new SimpleDateFormat('dd/MM/yyyy');
var d = sdf.parse('12/2/1952');

var sdf2 = new SimpleDateFormat("'nous sommes le' EEEE dd MMMM yyyy 'et il est' HH:mm:ss");

alert(sdf2.format(d)); // Affiche 'nous sommes le mardi 12 février 1952 et il est 00:00:00';

var sdf3 = new SimpleDateFormat('yy-MMM-dd KK:mm a', 'en');
var d2 = sdf3.parse('78-Dec-2 10:26 pm');

alert(sdf2.format(d2)); // Affiche 'nous sommes le samedi 02 décembre 1978 et il est 22:26:00';

sdf2.setLang('it');
alert(sdf2.format(d2)); // Affiche 'nous sommes le sabato 02 dicembre 1978 et il est 22:26:00';

var d3 = sdf.parse('12/13/2006'); // <=> sdf.parse('12/1/2006'): modulo sur le 13ème mois qui devient le 1er

sdf.setLenient(false); // Les dates invalides retournent une erreur (
var d4 = sdf.parse('12/13/2006'); //Affiche 'ParseException: lenient error...'
 

Conclusion

- Les 'pattern letters' G, z et Z n'ont pas étés implémentés (par rapport à la classe Java).
- Vous n'avez pas besoin de préciser la langue lorsque votre pattern ne fait pas intervenir le symbole E ou plus de 2 symboles M (de suite).
- La Langue par défaut est en français. La variable DateFormatSymbols.DEFAULT_LANG permet de la changer.
- Vous pouvez rajouter des langues à la fin du fichier...
- La classe SimpleDateFormat affiche un message d'alerte lorsqu'elle déclenche une exception. Vous pouvez tout aussi bien renvoyer null (par exemple) en remplaçant la ligne 'alert(e.message);' par 'return null;' dans les fonctions parse et format. Peut être pratique lorsque l'on veut savoir si une date est valide avec le lenient à false;

Je met également à dispo une version compacte, sans commentaires.


 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

22 novembre 2006 12:03:11 :
Précisions
22 novembre 2006 12:22:01 :
Tableau

Commentaires et avis

signaler à un administrateur
Commentaire de grumelo68 le 11/07/2007 14:31:01

J'aime pas beaucoup les scripts qui modifient le prototype d'object standard.
C'est vaiment pas une bonne idée surtout dans un environnement non contrôlé.
Ce script est un des rares à gérer à être multilingue, et en plus les traductions sont correctement implementées sous forme d'object et non pas de Arrays multiples.
C'est vraiment bien, j'aime beaucoup.

Pour quoi la timezone n'est pas implémentée ?
Il y a autre chose de très utile qui manque.

Si j'ai une date au format MM/dd/yyyy et que je demande à l'afficher au format MMM dd, yyyy HH:mm:ss, il est regrettable que le parseur ne sache pas reconnaître que je ne fourni pas de données pour l'heure. C'est vraiment une mauvaise habitude de remplacer ce qui manque par l'heure d'execution.

Il faudrait une sorte de flag quelque part qui indique si on traite une date pure ou une date + une heure.
Evidement l'object javascript Date intègre toujours l'heure d'ou l'intérêt dans un pattern de faire la difference entre la date et l'heure et selon les cas d'ignorer  l'heure.

Pour quoi je demande ca ? A cause d'un cas simple.
Mon utilisateur défini dans ses préférences qu'il veut voir les objects de type date au format : MMM dd, yyyy HH:mm:ss.
Que ce passe-t-il si mon application ne retourne qu'une date et pas une heure ?
Il n'y aucune raison d'afficher l'heure !






signaler à un administrateur
Commentaire de grumelo68 le 11/07/2007 15:16:55

G, z et Z ne sont pas implementés.
Ce serait bien dans ce cas de qu'en même les parser même si ils ne sont pas traités.

Car formatter un object date avec MMM dd, yyyy HH:mm:ss z et se retrouver avec 'March 02, 2007 14:05:07 z' c'est moyen.

signaler à un administrateur
Commentaire de tarzent le 27/09/2007 14:35:34

Salut Grumelo68,

Tout d'abord, merci pour ces commentaires.

G, z et Z ne sont pas implémentés car je n'ai tout bonnement pas eu le temps. Je le ferai peut-être dans une future version...

Et en ce qui concerne l'heure par défaut, je me suis contenté de copier le comportement par défaut de la classe Java. Et c'est très bien comme ça, puisque la classe retourne ce qui est demandé. Si tu lui demandes de te retourner une Date au format MMM dd, yyyy HH:mm:ss, elle complétera ce qui manque par des valeurs par défaut. La vérification dont tu parles ne doit pas être fait dans cette classe. D'ailleurs, quel serait le comportement de cette vérif ? Si l'utilisateur n'entre que les minutes et pas les heures ou inversement ? Dois-je afficher une heure par défaut + les minutes ou juste les minutes ?? Non... ce genre de vérification n'a vraiment pas sa place ici... La fonction annonce qu'elle retourne une heure alors elle retournera une heure ! Même si elle doit elle même lui donner une valeur.

Tu peux cependant mettre rapidement une solution en place en testant toi même si l'heure a été renseignée. Tu utiliserais alors 2 objets SimpleDateformat différent selon les cas.

var dateFormat = new SimpleDateFormat('dd/MM/yyyy');
var dateTimeFormat = new SimpleDateFormat('dd/MM/yyyy HH:mm:ss');
var dateString = isDateTime()
    ? dateTimeFormat.format(ta_date)
    : dateFormat.format(ta_date);

A toi d'implémenter la fonction isDateTime en fonction de tes besoins...

@+,
tarzent

signaler à un administrateur
Commentaire de grumelo68 le 09/01/2008 15:24:38

Je viens de rencontrer un problème sérieux avec la librairie.

Je sais qu'elle ne gère pas le time zone, cependant si je change la time zone de ma machine avec -GMT -0600 (Central Standard Time) et que j'essaye de convertir 01.02.2007 je me retrouve au mois de mars ??!

C'est apparement la function setMonthWithDatas qui s'envole ou disons en tout cas que generateDateWithDatas ne renvoie pas la bonne valeur. C'est sdf.parse('01.02.2007') qui ne renvoie pas la bonne valeur.

Voici mon code :

<div id="testDiv"></div>
<script type="text/javascript">
var dateFormatI = 'dd.MM.yyyy';
var dateFormatO = "'<span class=\"date\">'MMM dd, yyyy'</span>'";
var timeFormatI = "HH:mm:ss";
var timeFormatO = "HH:mm:ss";
var language = 'en';

var sdf = new SimpleDateFormat(dateFormatI,'en',false);
var sdf2 = new SimpleDateFormat(dateFormatO,language,false);

var HTML = sdf2.format(sdf.parse('01.01.2007'));
HTML += " (01.01.2007)";
HTML += "<br>";
HTML += sdf2.format(sdf.parse('01.02.2007'));
HTML += " (01.02.2007)";
HTML += "<br>";
HTML += sdf2.format(sdf.parse('01.03.2007'));
HTML += " (01.03.2007)";
HTML += "<br>";
HTML += sdf2.format(sdf.parse('01.04.2007'));
HTML += " (01.04.2007)";
HTML += "<br>";
HTML += sdf2.format(sdf.parse('01.05.2007'));
HTML += " (01.05.2007)";
HTML += "<br>";
HTML += sdf2.format(sdf.parse('01.06.2007'));
HTML += " (01.06.2007)";
HTML += "<br>";
HTML += sdf2.format(sdf.parse('01.07.2007'));
HTML += " (01.07.2007)";
HTML += "<br>";
HTML += sdf2.format(sdf.parse('01.08.2007'));
HTML += " (01.08.2007)";
HTML += "<br>";
HTML += sdf2.format(sdf.parse('01.09.2007'));
HTML += " (01.09.2007)";
HTML += "<br>";
HTML += sdf2.format(sdf.parse('01.10.2007'));
HTML += " (01.10.2007)";
HTML += "<br>";
HTML += sdf2.format(sdf.parse('01.11.2007'));
HTML += " (01.11.2007)";
HTML += "<br>";
HTML += sdf2.format(sdf.parse('01.12.2007'));
HTML += " (01.12.2007)";
HTML += "<br>";
HTML += sdf2.format(sdf.parse('11.01.2007'));
HTML += " (11.01.2007)";

document.getElementById('testDiv').innerHTML = HTML;
</script>

signaler à un administrateur
Commentaire de grumelo68 le 09/01/2008 16:37:01

Ok j'ai trouvé le "bug".
Tu n'avais aucune chance de le trouvé sans jouer avec les time zone de ton ordi.

Quand dans generateDateWithDatas() tu fais :
var d = new Date(0);
d.setHours(0);

Tu as simplement oublié d'ajouter :
d.setDate(1);

Car avec un time zone différent (celui des US par exemple) new Date(0) ne renvoie pas le 1er janvier 1970 mais le 31 décembre 1969.

Donc quand tu vas essayer de changer le mois de la variable d avec le moi de février par exemple tu passes automatiquement au mois suivant. Voila pourquoi tous les mois qui n'ont pas 31 jours n'étais pas converti correctement.

Voici un petit code tout bête pour vérifier mes dires :
<div id="testDiv2"></div>
<script type="text/javascript">
var myDate = new Date(0);
var HTML = "- -<br>";
HTML += myDate;
myDate.setFullYear(2007);
HTML += "<br>";
HTML += myDate;
myDate.setMonth(1);
HTML += "<br>";
HTML += myDate;
document.getElementById('testDiv').innerHTML = HTML2;
</script>

Avec une time zone americaine bonjour la surprise :D

signaler à un administrateur
Commentaire de tarzent le 09/01/2008 16:45:20

ok, merci je prend note !

signaler à un administrateur
Commentaire de grumelo68 le 06/02/2008 11:30:04

Coucou, c'est encore moi :D

Comment tu peux écrire dans ton code :

# SimpleDateFormat.YEAR = new Number(_FULL_YEAR.substring(2));
#
# function SimpleDateFormat(pattern, lang, lenient) {

Sans que ça explose ???

Tu défini une propriété à une classe avant même que celle ci ne soit créée ?
Ce que je ne comprends c'est que dans ton script ça marche et alors que si j'essaye de faire pareil dans les miens je me prend un bon gros NOT DEFINED.

signaler à un administrateur
Commentaire de tarzent le 06/02/2008 11:48:21

Salut,

Si tu veux être sûr que ça passe, déclare ta constante après la définition de ta classe.
Et si tu veux faire des trucs clean, je te conseille vivement prototype : http://www.prototypejs.org

@+

signaler à un administrateur
Commentaire de grumelo68 le 05/05/2008 15:01:34

Pour éviter tous les problèmes d'affichage j'ai converti tous les caractères en leur équivalent HTML

DateFormatSymbols.CONST={'ca':[['gener','febrer','mar&ccedil;','abril','maig','juny','juliol','agost','setembre','octubre','novembre','desembre'],['gen.','feb.','mar&ccedil;','abr.','maig','juny','jul.','ag.','set.','oct.','nov.','des.'],['diumenge','dilluns','dimarts','dimecres','dijous','divendres','dissabte'],['dg.','dl.','dt.','dc.','dj.','dv.','ds.']],'da':[['januar','februar','marts','april','maj','juni','juli','august','september','oktober','november','december'],['jan','feb','mar','apr','maj','jun','jul','aug','sep','okt','nov','dec'],['s&#345;ndag','mandag','tirsdag','onsdag','torsdag','fredag','l&#345;rdag'],['s&#345;','ma','ti','on','to','fr','l&#345;']],'de':[['Januar','Februar','M&auml;rz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'],['Jan','Feb','Mrz','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez'],['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],['So','Mo','Di','Mi','Do','Fr','Sa']],'en':[['January','February','March','April','May','June','July','August','September','October','November','December'],['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],['Sun','Mon','Tue','Wed','Thu','Fri','Sat']],'es':[['enero','febrero','marzo','abril','mayo','junio','julio','agosto','septiembre','octubre','noviembre','diciembre'],['ene','feb','mar','abr','may','jun','jul','ago','sep','oct','nov','dic'],['domingo','lunes','martes','mi&eacute;rcoles','jueves','viernes','s&aacute;bado'],['dom','lun','mar','mi&eacute;','jue','vie','s&aacute;b']],'et':[['Jaanuar','Veebruar','M&auml;rts','Aprill','Mai','Juuni','Juuli','August','September','Oktoober','November','Detsember'],['Jaan','Veebr','M&auml;rts','Apr','Mai','Juuni','Juuli','Aug','Sept','Okt','Nov','Dets'],['p&uuml;hap&auml;ev','esmasp&auml;ev','teisip&auml;ev','kolmap&auml;ev','neljap&auml;ev','reede','laup&auml;ev'],['P','E','T','K','N','R','L']],'fi':[['tammikuu','helmikuu','maaliskuu','huhtikuu','toukokuu','kes&auml;kuu','hein&auml;kuu','elokuu','syyskuu','lokakuu','marraskuu','joulukuu'],['tammi','helmi','maalis','huhti','touko','kes&auml;','hein&auml;','elo','syys','loka','marras','joulu'],['sunnuntai','maanantai','tiistai','keskiviikko','torstai','perjantai','lauantai'],['su','ma','ti','ke','to','pe','la']],'fr':[['janvier','f&eacute;vrier','mars','avril','mai','juin','juillet','ao&#369;t','septembre','octobre','novembre','d&eacute;cembre'],['janv.','f&eacute;vr.','mars','avr.','mai','juin','juil.','ao&#369;t','sept.','oct.','nov.','d&eacute;c.'],['dimanche','lundi','mardi','mercredi','jeudi','vendredi','samedi'],['dim.','lun.','mar.','mer.','jeu.','ven.','sam.']],'is':[['jan&uacute;ar','febr&uacute;ar','mars','apr&#283;l','ma&#283;','j&uacute;n&#283;','j&uacute;l&#283;','&aacute;g&uacute;st','september','okt&oacute;ber','n&oacute;vember','desember'],['jan.','feb.','mar.','apr.','ma&#283;','j&uacute;n.','j&uacute;l.','&aacute;g&uacute;.','sep.','okt.','n&oacute;v.','des.'],['sunnudagur','m&aacute;nudagur','&#355;ri&#273;judagur','mi&#273;vikudagur','fimmtudagur','f&ouml;studagur','laugardagur'],['sun.','m&aacute;n.','&#355;ri.','mi&#273;.','fim.','f&ouml;s.','lau.']],'it':[['gennaio','febbraio','marzo','aprile','maggio','giugno','luglio','agosto','settembre','ottobre','novembre','dicembre'],['gen','feb','mar','apr','mag','giu','lug','ago','set','ott','nov','dic'],['domenica','luned&#283;','marted&#283;','mercoled&#283;','gioved&#283;','venerd&#283;','sabato'],['dom','lun','mar','mer','gio','ven','sab']],'nl':[['januari','februari','maart','april','mei','juni','juli','augustus','september','oktober','november','december'],['jan','feb','mrt','apr','mei','jun','jul','aug','sep','okt','nov','dec'],['zondag','maandag','dinsdag','woensdag','donderdag','vrijdag','zaterdag'],['zo','ma','di','wo','do','vr','za']],'no':[['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],['s&#345;ndag','mandag','tirsdag','onsdag','torsdag','fredag','l&#345;rdag'],['s&#345;','ma','ti','on','to','fr','l&#345;']],'pt':[['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],['Jan','Fev','Mar','Abr','Mai','Jun','Jul','Ago','Set','Out','Nov','Dez'],['Domingo','Segunda-feira','Ter&ccedil;a-feira','Quarta-feira','Quinta-feira','Sexta-feira','S&aacute;bado'],['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b']],'sl':[['januar','februar','marec','april','maj','junij','julij','avgust','september','oktober','november','december'],['jan','feb','mar','apr','maj','jun','jul','avg','sep','okt','nov','dec'],['Nedelja','Ponedeljek','Torek','Sreda','?etrtek','Petek','Sobota'],['Ned','Pon','Tor','Sre','?et','Pet','Sob']],'sv':[['januari','februari','mars','april','maj','juni','juli','augusti','september','oktober','november','december'],['jan','feb','mar','apr','maj','jun','jul','aug','sep','okt','nov','dec'],['s&ouml;ndag','m&#314;ndag','tisdag','onsdag','torsdag','fredag','l&ouml;rdag'],['s&ouml;','m&#314;','ti','on','to','fr','l&ouml;']]}

Penses tu implémenter la conversion du time zone ?
Si non, peux tu me contacter pour que je le fasse ? J'en ai vraiment besoin.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Verif d'une date et d'une heure [ par Sinse ] Salut! Voila j'ai un truc plutot bizarre qui se passe : j'ai une procedure de verification de date qui marche correctement, dans la meme function je v javascript probleme format date [ par wanted87 ] bonjour je suis en asp et sur ma base sql ma variable date_pret et date retour sont enregistrés en format jj/mm/aaaa et je voudrai controler date_pret SVP, erreur de syntaxe que je ne vois pas!!!!!! [ par sema ] hello,j'ai un formulaire: Date de mise en ligne Format de la date : jj/mm/aaaa </ Existe-t-il une fonction Javascript permettant de voir si une date est au bon format ?? (YYYY-MM-DD) [ par BeebopMcFly ] &nbsp;Bonjour, Comme le dis si bien le titre, je cherche &#224; savoir s'il existe une fonction Javascript permettant de voir si une date est au bon f format date [ par chapata ] Hello ,je ramene d'excel des donn&#233;es (... ok non souci ...) dans mes donn&#233;es j'ai une date (... pas de probl&#232;me...) quand je l'affecte chiffre au format date [ par davidcian ] Bonjour,j'aimerais récupérer un chiffre au format d'une date:j'appel ma fonction en php:&lt;td width="60" onclick= "javascript:date('.$jour_suiv.','.$ Date en format Unix vers date en format 'humain' [ par rvanbellingen ] Existe-t-il une fonction pour faire passer une date de ce format 11773473000 à un format plus normal?MerciRod[:I] format date [ par santano ] Bonjour,je cherche un script qui permet de verifier la date sous la forme jj/mm/aaaa dans un champmerci a vous Format de DATE Spécifique [ par vinzemuls ] Bonjour,je suis ammené à remplacer un composant développé par une société par mon propre composant. Afin de pouvoir réutiliser l'existant, je n'arrive Probleme pour parser du xml avec I.E [ par rhan_659 ] Bonjourj'ai fais un code pour parser un flux XML (obtenue via de l'ajax), ça marche nickel sous Firefox mais i.e ne veux rien savoirvoila le codevar e


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.