begin process at 2010 02 10 17:25:39
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date & Heure

 > SIMPLEDATEFORMAT SIMILAIRE À LA CLASSE JAVA

SIMPLEDATEFORMAT SIMILAIRE À LA CLASSE JAVA


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :11 305 / 230

Auteur : tarzent

Ecrire un message privé
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/ind ex.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

Les Membres Club peuvent 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

 Sources du même auteur

CALCUL DE LA CLÉ RIB
FONCTIONS DE VÉRIFICATION DE FORMULAIRE + FONCTIONS UTILES (...
REMPLACE LES CARACTÈRES AVEC ACCENT EN CARACTÈRES HTML
DEGRADE DE TEXTE 2 COULEURS
CONVERSION DECIMALE HEXADECIMALE

 Sources de la même categorie

Source avec Zip CHRONOMÈTRE AMÉLIORÉ par Kolosta
Source avec Zip SLEEP() SANS BOUCLE D'ATTENTE CONSOMMATRICE par Phildepantin
Source avec Zip AFFICHAGE DE L'HEURE ET DU FUSEAU HORAIRE (TIMEZONE) SUR LA ... par navylav2
Source avec Zip Source avec une capture HORLOGE TRIPLE AFFICHAGE AU FORMAT AM/PM/24H/DST par sofiane1234
Source avec Zip Source avec une capture HORLOGE NUMÉRIQUE EN JAVASCRIPT, COMPATIBLE IE ET FF par bad_dark_spirit

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture HORLOGE TRIPLE AFFICHAGE AU FORMAT AM/PM/24H/DST par sofiane1234
Source avec Zip Source avec une capture HORLOGE NUMÉRIQUE EN JAVASCRIPT, COMPATIBLE IE ET FF par bad_dark_spirit
Source avec Zip UN CHAMP DE SAISIE DE DATE par guykoumba
Source avec Zip HEURE, DATE DU JOUR DE L'INTERNAUTE ET FÊTE À SOUHAITER. par sneezy
SCRIPT POUR LE FORMATAGE DE LA DATE SELON CHOIX DU TYPE par Jackboy

Commentaires et avis

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 !






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.

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

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>

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

Commentaire de tarzent le 09/01/2008 16:45:20

ok, merci je prend note !

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.

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

@+

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 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 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 comment formater lorsqu'on saisie une date et l'heure [ par machmacha ] bonjour tout le monde,j'ai un petit problème sur le formatage d'un champ qui contient une date + l'heure j'expose mon problème: <img src="file:///C:


Nos sponsors


Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,827 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales