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).
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 já 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
.
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...
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) />
<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.
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');
<cfscript>
txtBirthDate=CreateODBCDate("1983-10-07");
txtBirthDate=LSDateFormat(txtBirthDate, "dd/mm/yyyy");
</cfscript>
<cfoutput>
#txtBirthDate#
</cfoutput>