我从 Stripe 请求返回的字段之一是 created 字段,其中包含值“1351894331”。我曾尝试在 Coldfusion 中使用 DateFormat() 来格式化它,但这并没有成功。我想这是某种日期类型/时间戳,需要在 DateFormatting 之前进行转换,但是我需要使用什么?那是什么类型的日期格式?
谢谢
我从 Stripe 请求返回的字段之一是 created 字段,其中包含值“1351894331”。我曾尝试在 Coldfusion 中使用 DateFormat() 来格式化它,但这并没有成功。我想这是某种日期类型/时间戳,需要在 DateFormatting 之前进行转换,但是我需要使用什么?那是什么类型的日期格式?
谢谢
那可能是从 1970-01-01 开始的几秒钟?这段代码:
<cfoutput>#dateAdd("s", 1351894331, createDateTime(1970, 1, 1, 0, 0, 0))#</cfoutput>
输出:
{ts '2012-11-02 21:12:11'}
那会是您期望的时间戳吗?
你读过“条纹”文档吗?如果我想知道某件事是如何运作的,我的第一个停靠点就是 RTFM。恰当地说,如果有点不雅。
一时兴起,我为您搜索了“条带创建时间戳的格式是什么”。第一个链接到这里。第二个链接指向strip.com's docs 上的相关问题,其中说:
是的,所有 Stripe 时间都以 UTC 表示,表示为 Unix 纪元。
只是为了验证Unix 纪元日期,我也用谷歌搜索了。答案是:
Unix 时间,[...] 是 [...] 定义为自 1970 年 1 月 1 日协调世界时 (UTC) 午夜以来经过的秒数
当然,如果您指的是其他类型的“条纹”,则必须详细说明。
这是一个 unix 时间戳——自 1970 年 1 月 1 日以来的秒数——通常用作存储日期的方法。
但在 CFML 中不是这样,日期被处理为自 1899 年 12 月 30 日以来的浮动天数。
要将 unix 时间戳转换为 CF 日期数字,您需要除以一天中的秒数 (86400),然后将两个日期之间的天数相加。
<cfset UnixTime = 1351894331 />
<!--- days between 1-Jan-1970 and 30-Dec-1899) --->
<cfset UnixTimeOffset = 25569 />
<cfset CfTime = UnixTimeOffset + UnixTime/86400 />
然后,您可以CfTime
在任何日期函数中使用该变量,它们将照常工作。
Stripe 是 CFPAYMENT(一个经过良好测试的库,可帮助您避免编写电子商务管道代码)中受支持的网关,并具有用于日期转换的辅助函数。您可以在此处查看方法:
https://github.com/ghidilli/cfpayment/blob/master/api/gateway/stripe/stripe.cfc
<cffunction name="dateToUTC" output="false" access="public" returntype="any" hint="Take a date and return the number of seconds since the Unix Epoch">
<cfargument name="date" type="any" required="true" />
<cfreturn dateDiff("s", dateConvert("utc2Local", "January 1 1970 00:00"), arguments.date) />
</cffunction>
<cffunction name="UTCToDate" output="false" access="public" returntype="date" hint="Take a UTC timestamp and convert it to a ColdFusion date object">
<cfargument name="utcdate" required="true" />
<cfreturn dateAdd("s", arguments.utcDate, dateConvert("utc2Local", "January 1 1970 00:00")) />
</cffunction>