Agora () valor em Coldfusion
estou a tentar definir a expressão {[[0]} num cookie e a manipular os valores numa função JS.
o valor da expressão está a ser mostrado como 41720.406
? O que significa este valor?
3 answers
Em vez disso, pode querer usar DateAdd()
. Então use DateAdd('d', 30, Now())
.
<cfset x = DateAdd('d', 30, now())>
<cfoutput>#toScript(x, "time")#</cfoutput>
Resultado:
time = new Date(2014, 2, 22, 2, 36, 26);
41720.406? O que significa este valor?
Para responder à tua pergunta, aparentemente representa um número de dias da época CF ie 1899-12-30, mais ou menos compensações Fuso-horário.
<cfscript>
cfEpoch = createDate(1899, 12, 30);
// add number of whole days ie 41720
finalDate = dateAdd("d", 41720, cfEpoch );
// add partial days ie partialDay * millisecondsPerDay
finalDate = dateAdd("l", 0.406 * 86400000, finalDate);
// Result: Today's date and time plus 30 days
writeOutput( "finalDate="& dateConvert("local2UTC", finalDate) );
</cfscript>
Dito isto, é muito mais simples usar funções de data como outros sugeriram, em vez de mexer com objetos de tempo.
Já que mencionou cookies, vale a pena assinalar que as datas dos cookies usam um formato específico, isto é,Thu, 01-Jan-1970 00:00:01 GMT
Não é assim que os formatos CF datam por Omissão - Quando você produz #SomeDate#
o formato usado é {ts '1970-01-01 00:00:01'}
em vez disso.
Aqui está uma função que devolve uma data como um texto no formato que os cookies usam:
<cffunction name="formatCookieDate" returntype="String" output=false access="public">
<cfargument name="DateTime" type="Date" default=#Now()# />
<cfargument name="isUtc" type="String" default=false />
<cfif NOT Arguments.isUtc >
<cfset Arguments.DateTime = DateConvert('local2utc',Arguments.DateTime) />
</cfif>
<cfreturn DateTimeFormat( Arguments.DateTime ,'E, dd Mmm yyyy HH:nn:ss' ) & ' GMT' />
</cffunction>
Podes usá - lo assim:
formatCookieDate( Now() + 30 )
Embora alguns prefiram usar DateAdd , é perfeitamente válido adicionar dias directamente-embora possa querer para considerar se você está realmente querendo adicionar 30 dias versus adicionar um mês.
Nota: nas versões anteriores ao CF10 terá de dividir o DateTimeFormat em DateFormat e TimeFormat e actualizar as máscaras em conformidade.