Simpledateformat similaire à la classe java

Soyez le premier à donner votre avis sur cette source.

Vue 15 915 fois - Téléchargée 371 fois

Description

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.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
7
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
5 mai 2008

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ç','abril','maig','juny','juliol','agost','setembre','octubre','novembre','desembre'],['gen.','feb.','març','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řndag','mandag','tirsdag','onsdag','torsdag','fredag','lřrdag'],['sř','ma','ti','on','to','fr','lř']],'de':[['Januar','Februar','Mä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ércoles','jueves','viernes','sábado'],['dom','lun','mar','mié','jue','vie','sáb']],'et':[['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni','Juuli','August','September','Oktoober','November','Detsember'],['Jaan','Veebr','Märts','Apr','Mai','Juuni','Juuli','Aug','Sept','Okt','Nov','Dets'],['pühapäev','esmaspäev','teisipäev','kolmapäev','neljapäev','reede','laupäev'],['P','E','T','K','N','R','L']],'fi':[['tammikuu','helmikuu','maaliskuu','huhtikuu','toukokuu','kesäkuu','heinäkuu','elokuu','syyskuu','lokakuu','marraskuu','joulukuu'],['tammi','helmi','maalis','huhti','touko','kesä','heinä','elo','syys','loka','marras','joulu'],['sunnuntai','maanantai','tiistai','keskiviikko','torstai','perjantai','lauantai'],['su','ma','ti','ke','to','pe','la']],'fr':[['janvier','février','mars','avril','mai','juin','juillet','aoűt','septembre','octobre','novembre','décembre'],['janv.','févr.','mars','avr.','mai','juin','juil.','aoűt','sept.','oct.','nov.','déc.'],['dimanche','lundi','mardi','mercredi','jeudi','vendredi','samedi'],['dim.','lun.','mar.','mer.','jeu.','ven.','sam.']],'is':[['janúar','febrúar','mars','aprěl','maě','júně','júlě','ágúst','september','október','nóvember','desember'],['jan.','feb.','mar.','apr.','maě','jún.','júl.','ágú.','sep.','okt.','nóv.','des.'],['sunnudagur','mánudagur','ţriđjudagur','miđvikudagur','fimmtudagur','föstudagur','laugardagur'],['sun.','mán.','ţri.','miđ.','fim.','fö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ě','martedě','mercoledě','giovedě','venerdě','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řndag','mandag','tirsdag','onsdag','torsdag','fredag','lřrdag'],['sř','ma','ti','on','to','fr','lř']],'pt':[['Janeiro','Fevereiro','Març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ça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'],['Dom','Seg','Ter','Qua','Qui','Sex','Sá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öndag','mĺndag','tisdag','onsdag','torsdag','fredag','lördag'],['sö','mĺ','ti','on','to','fr','lö']]}

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.
Messages postés
30
Date d'inscription
vendredi 12 juillet 2002
Statut
Membre
Dernière intervention
15 mai 2009

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

@+
Messages postés
7
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
5 mai 2008

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.
Messages postés
30
Date d'inscription
vendredi 12 juillet 2002
Statut
Membre
Dernière intervention
15 mai 2009

ok, merci je prend note !
Messages postés
7
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
5 mai 2008

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 :

<script type="text/javascript">
var myDate = new Date(0);
var HTML = "- -
";
HTML += myDate;
myDate.setFullYear(2007);
HTML += "
";
HTML += myDate;
myDate.setMonth(1);
HTML += "
";
HTML += myDate;
document.getElementById('testDiv').innerHTML = HTML2;
</script>

Avec une time zone americaine bonjour la surprise :D
Afficher les 9 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.