我正在尝试在cookie中设置表达式#Now() + CreateTimeSpan('30','0','0','0')#
并操纵JS函数中的值。
表达式的值显示为41720.406
?这个值意味着什么?
任何指针都会非常有用。
答案 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拆分为DateFormat和TimeFormat并相应地更新遮罩。