2010-11-17 5 views
3

J'ai trouvé la fonction ParseDateTime mais elle ne fait qu'analyser une chaîne de date/heure selon les conventions de langue anglaise (US). Comment analyser la date au format jj/mm/aaaa?ColdFusion: Comment analyser jj/mm/aaaa date formulée?

Essayez ceci:

<cfset TestdateFrom = ParseDateTime("10/9/2010") /> 
<cfloop index="i" from="1" to="30" step="1"> 
    <cfset TestdateFrom = DateAdd("d", 1, TestdateFrom) /> 
    #TestdateFrom#<br/> 
</cfloop> 

En CF9 il y a une fonction LSParseDateTime.

Je ne sais pas si cela m'aidera ou non. Enfin, devrais-je utiliser la bibliothèque java pour résoudre ce problème?

+0

Qu'est-ce que vous essayez exactement de faire, ou que voulez-vous comme résultat final? – crosenblum

Répondre

3

J'ai eu du succès avec cette technique pour traiter (UK formaté) dates entrées texte libre:

<cfset SetLocale("English (UK)")> 
<cfset valid = true> 

<!--- Convert DD-MM-YYYY or DD.MM.YYYY to DD/MM/YYYY ---> 
<cfset dt = replacelist(dt, ".,-", "/,/")> 

<!--- count date elememnts (must be 3 - LSParseDateTime will make potentially incorrect assumptions otherwise) ---> 
<cfif listlen(dt, "/") neq 3> 
    <!--- wrong number of elements ---> 
    <cfset valid = false> 
<cfelse> 
    <!--- Correct number of elements so try to interpret as date/time object ---> 
    <cftry> 
     <cfset dt = LSParseDateTime(dt)> 
     <cfcatch type="Expression"> 
      <cfset valid = false> 
     </cfcatch> 
    </cftry> 
</cfif> 

Si elle est valide est vrai à la fin de cela, la représentation de la date de chaîne dans dt a été converti en objet date/heure. L'étape de remplacement permet de saisir la date sous la forme JJ.MM.AAAA ou JJ-MM-AAAA, ainsi que JJ/MM/AAAA.

+0

Oublié de mentionner que LSParseDateTime est disponible depuis au moins la version 4.5 au cas où quelqu'un le lit et pense qu'il est neuf dans CF9 – TimDawe

+0

Yup, qui a travaillé assez bien, merci beaucoup! – Vikas

6

On dirait que cela fonctionne:

<cfset formatter = createObject("java","java.text.SimpleDateFormat")> 
<cfset formatter.init("dd/MM/yyyy")> 
<cfset newDate = formatter.parse("10/09/2010")> 
#newDate# 

Toutes les autres suggestions?

+1

J'ai eu un bon succès avec cette approche - elle est flexible et fonctionne pour toutes sortes de dates formatées, ce qui ne peut être dit pour l'approche pure de ColdFusion. –

2

Vous devez utiliser lsParseDateTime(). C'est l'analyseur de date spécifique aux paramètres régionaux.

Vous pouvez passer directement un paramètre régional dans le second paramètre de la fonction ou utiliser setlocale() pour le définir pour la requête.

Vous trouverez probablement utile d'examiner également les autres fonctions préfixées LS.

+0

poster le code s'il vous plaît .. – Vikas

5

Si votre format est compatible, vous pouvez aussi faire quelque chose comme ceci:

<cfset dy=listGetAt(dateString,1,"/")> 
<cfset mo=listGetAt(dateString,2,"/")> 
<cfset yr=listGetAt(dateString,3,"/")> 

<cfset myDate=createDate(yr,mo,dy)> 

Mais, vraiment, Tim's answer est le meilleur.