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?

Qualquer indicação seria muito útil.

Author: Leigh, 2014-02-20

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);
 3
Author: Henry, 2014-02-20 02:36:34

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.

 4
Author: Leigh, 2014-02-20 05:21:57

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.

 1
Author: Peter Boughton, 2014-02-20 15:46:05