Now()Coldfusion中的值

时间:2014-02-20 02:18:57

标签: coldfusion

我正在尝试在cookie中设置表达式#Now() + CreateTimeSpan('30','0','0','0')#并操纵JS函数中的值。

表达式的值显示为41720.406?这个值意味着什么?

任何指针都会非常有用。

3 个答案:

答案 0 :(得分:4)

  

41720.406?这个值意味着什么?

要回答你的问题,显然它代表从CF时代开始的几天,即1899-12-30,正负时区偏移。

 <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>

话虽如此,像其他人建议的那样使用date functions要简单得多,而不是用时间跨度对象来捣乱。

答案 1 :(得分:3)

您可能希望改用DateAdd()。因此,请使用DateAdd('d', 30, Now())

<cfset x = DateAdd('d', 30, now())>
<cfoutput>#toScript(x, "time")#</cfoutput>

输出:

time = new Date(2014, 2, 22, 2, 36, 26);

答案 2 :(得分:1)

由于您提到了Cookie,因此值得指出Cookie的日期使用特定格式,即Thu, 01-Jan-1970 00:00:01 GMT

默认情况下,这不是CF格式的日期 - 当您输出#SomeDate#时,使用的格式为{ts '1970-01-01 00:00:01'}

这是一个函数,它以cookie使用的格式返回日期作为字符串:

<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>

你可以像这样使用它:

formatCookieDate( Now() + 30 )

虽然有些人更喜欢使用DateAdd,但直接添加天数是完全有效的 - 尽管您可能需要考虑是否真的想要添加30天而不是添加1个月。

注意:在CF10之前的版本中,您需要将DateTimeFormat拆分为DateFormatTimeFormat并相应地更新遮罩。