Createdato de coldfusão()

estou a aprender sobre a função de Coldfusão CreateDate. Mas, quando eu uso CreateDate o resultado do valor é diferente. Quero dizer que muda de mês para dia e de dia para mês.

<cfoutput>
<cfset txtBirthDate='07-10-1983'>
<cfset valueOf_txtBirthDate =  dateFormat(CreateDate(Year(txtBirthDate),Month(txtBirthDate),Day(txtBirthDate)),'YYYY-MMM-DD')>

#txtBirthDate#<br/><br/>
#valueOf_txtBirthDate#<br/>
</cfoutput>

O valor de txtBirthDate é 07-10-1983, mas o valor de valueOf_txtBirthDate que CreateDate criado é 1983-Jul-10. Porque estamos em julho? É suposto ser outubro: 07 (Data), 10(mês), 1983(ano).

Há algum problema com o formato?

Author: James A Mohler, 2014-08-28

6 answers

Está a usar createDate() de uma forma muito complicada. txtBirthDate não é uma data, por isso não deves usá-la como entrada para funções de data como:year(), month() etc. A entrada deve ser um objecto de data quando usar uma função de data.

Digamos que você começa com o texto 07-10-1983, onde o formato é mm-dd-yyyy.

txtBirthDate ='07-10-1983'; // dd-mm-yyyy

// extract the specific date parts from the string
yyyy = listLast(txtBirthDate, "-");
mm = listGetAt(txtBirthDate, 2, "-"); 
dd = listFirst(txtBirthDate, "-");

// create a date object out of those components
birthDate = createDate(yyyy, mm, dd);

// output the date object in human readable format
writeOutput(dateFormat(birthDate, "YYYY-MM-DD"));
(Obviamente em código real você não teria aqueles comentários que servem apenas para dizer o óbvio!)

Utilizar apenas dateFormat() no último ponto como tu entregas. Para outras operações de data, utilize o objecto de data actual: birthDate.

 7
Author: Adam Cameron, 2014-08-28 13:00:02

Porque por omissão a sua data é o formato mm/dd/AAAA. Então

<cfset txtBirthDate='07-10-1983'>

Será lido como 10 de julho de 1983 pela CF. Daí a saída...

 1
Author: CFML_Developer, 2014-08-28 04:16:22

Pode usar a Função Java para executar isto. É assim que funciona:

<cfset txtBirthDate='07-10-1983' />
<cfset formatter = createObject("java","java.text.SimpleDateFormat") />
<cfset formatter.init("dd-MM-yyyy") />
<cfset birthDate= formatter.parse(txtBirthDate) />
 0
Author: Pankaj, 2014-08-28 09:15:06
Parece que deve resultar.
 <cfset txtBirthDate = '10-7-1983'>
 #DateFormat(txtBirthDate, "MMM, D, YYYY")#
Reparem que inverti a posição de mês e dia em cfset para fazer com que saísse bem.
 0
Author: Andy, 2014-09-11 08:22:01
Podes fazer algo simples como isso.
txtBirthDate = '07-10-1983'; //dd-mm-yyyy
arrayDate = listToArray(txtBirthDate, '-');
date_birthDate = createDate(arrayDate[3], arrayDate[2], arrayDate[1]);

writeOutput(lsDateFormat(date_birthDate, 'yyyy-mm-dd');
 0
Author: Nicolas A, 2015-04-28 07:48:20
<cfscript>
    txtBirthDate=CreateODBCDate("1983-10-07");
    txtBirthDate=LSDateFormat(txtBirthDate, "dd/mm/yyyy");
</cfscript>

<cfoutput>
    #txtBirthDate#
</cfoutput>
 0
Author: Darth Guybrush, 2016-04-13 00:30:46