3

我从 Stripe 请求返回的字段之一是 created 字段,其中包含值“1351894331”。我曾尝试在 Coldfusion 中使用 DateFormat() 来格式化它,但这并没有成功。我想这是某种日期类型/时间戳,需要在 DateFormatting 之前进行转换,但是我需要使用什么?那是什么类型的日期格式?

谢谢

4

3 回答 3

8

那可能是从 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) 午夜以来经过的秒数

当然,如果您指的是其他类型的“条纹”,则必须详细说明。

于 2012-11-03T14:20:34.980 回答
5

这是一个 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在任何日期函数中使用该变量,它们将照常工作。

于 2012-11-03T14:32:06.320 回答
1

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>
于 2014-07-18T21:13:42.827 回答