【问题标题】:How to format Stripe timestamp in Coldfusion如何在 Coldfusion 中格式化 Stripe 时间戳
【发布时间】:2012-10-23 23:15:38
【问题描述】:

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

谢谢

【问题讨论】:

  • 也许你不应该假设每个人都知道什么是“条纹”。是不是这个:stripe.com

标签: coldfusion stripe-payments


【解决方案1】:

这可能是从 1970-01-01 开始的几秒钟?这段代码:

<cfoutput>#dateAdd("s", 1351894331, createDateTime(1970, 1, 1, 0, 0, 0))#</cfoutput>

输出:

{ts '2012-11-02 21:12:11'}

这与您期望的时间戳差不多吗?

您是否阅读过“Stripe”文档?如果我想知道某件事是如何运作的,我的第一个停靠点就是 RTFM。说得恰到好处,虽然有点不雅。

一时兴起,我googled "what format is stripe created timestamps in" for you。第一个链接到这里。第二个链接是the relevant question on strip.com's docs,上面写着:

是的,所有 Stripe 时间都以 UTC 表示,表示为 Unix 纪元。

只是为了验证the Unix Epoch date, I googled that too。答案是:

Unix 时间,[...] 是 [...] 定义为自 1970 年 1 月 1 日协调世界时 (UTC) 午夜以来经过的秒数

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

【讨论】:

  • 也可以只使用createDate(1970,1,1) 为第三个参数获取相同的值。
  • @Adam Cameron:事实上,我确实阅读了文档并进行了一些谷歌搜索,但显然我无法找到与您相同的解决方案。所以我可能应该退出编程,对吧?
  • @AdamCameron:感谢您对解决方案的帮助,但不是生命课程。 :)
  • 希望你能从两者中获得一些东西,即使一个比另一个更受欢迎。坚持下去,记住 Google 是你的朋友。
  • 为保护行动,有人告诉我我的 Google-Fu 很强大,而且我也很难找到这些信息。感谢 Cheeky 发布这个问题和 Adam 回答它!
【解决方案2】:

这是一个 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 变量,它们将照常工作。

【讨论】:

  • 你确定吗? Cf OleDateTime 类扩展了 java.util.Date 类,该类将其值存储为从纪元开始的秒数,即 1970 年 1 月 1 日,格林威治标准时间 00:00:00。你从哪里得到 1899 年 12 月 30 日?
  • 如果您想将 unix 时间戳从整数转换为 cf 日期,可以使用:myCfDate = createObject('java','coldfusion.runtime.OleDateTime').init(javaCast('long',1351894331 * 1000)); - 您需要将时间戳乘以 1000 - 这意味着零毫秒
  • OleDateTime,当使用 Long 构造时,将其包装为超级 java.util.Date,如下所述:docs.oracle.com/javase/6/docs/api/java/util/…
  • 不,我不确定 - 我只是凭空取出了那个日期和代码示例。 ¬_¬ cfg11n.blogspot.co.uk/2006/05/…bennadel.com/blog/…
  • "OLE 自动化日期格式是一个浮点值,从 1899 年 12 月 30 日午夜开始计算天数。小时和分钟表示为小数天。" stackoverflow.com/questions/6714372/…
【解决方案3】:

Stripe 是 CFPAYMENT(一个经过良好测试的库,可帮助您避免编写电子商务管道代码)中受支持的网关,并具有用于日期转换的辅助函数。您可以在此处查看方法:

https://github.com/ghidinelli/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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 2012-06-24
    相关资源
    最近更新 更多