You need to enable JavaScript to run this app. 如何从Stripe订阅JSON数据中获取月度订阅起止日期及正确转换时间戳
优惠活动
大模型
产品
解决方案
定价
更多

如何从Stripe订阅JSON数据中获取月度订阅起止日期及正确转换时间戳

问题根因排查

你转换时间得到1970年的结果,本质是时间戳单位混淆导致的。
Stripe返回的所有Unix时间戳都是秒级精度,而Node.js中Date构造函数默认接收的是毫秒级精度的时间值。直接把秒级时间戳传入构造函数,会被程序误识别为毫秒数计算,最终结果自然落在1970年的时间区间——你之前看到的Mon Jan 19 1970的结果,刚好就是误把1613973928秒当成1613973928毫秒计算得到的(1613973928毫秒约等于18.7天,对应从1970年1月1日起的第19天时刻)。

正确提取Stripe订阅字段

针对你需要存储的订阅开始日期、下一次周期扣费日期,直接从返回的JSON结构中取对应字段即可,不需要手动计算:

  • 当前计费周期开始日期:对应current_period_start字段,你现有样本中的值为1611295528
  • 当前计费周期结束日期(即下一次自动扣费/续费时间):对应current_period_end字段,你现有样本中的值为1613973928
  • 订阅首次生效日期:对应start_date字段,对应当前样本的1个月周期订阅,这个值和current_period_start完全一致
    注意:不要直接用created字段作为周期开始时间,虽然样本中两者数值相同,但如果用户经历过试用、中途调整订阅档位,created是订阅记录的创建时间,不一定和当前计费周期的开始时间匹配
正确的秒级时间戳转换方案

转换Stripe返回的时间戳时,只需要把秒级值乘以1000转为毫秒数,再传入Date构造函数即可得到正确时间,常用实现如下:

// Stripe返回的秒级时间戳
const currentPeriodStart = 1611295528
const currentPeriodEnd = 1613973928

// 转换为Date对象(乘1000补毫秒精度)
const startDate = new Date(currentPeriodStart * 1000)
const endDate = new Date(currentPeriodEnd * 1000)
// 转换后验证:对应周期为2021-02-02 至 2021-03-02,符合月度订阅的时间跨度

日常存储推荐选择无时区歧义的格式入库,避免不同时区访问出现时间偏差:

  • 可以直接存储原始的秒级时间戳数值,或者转换为毫秒级时间戳
  • 也可以转换为ISO标准UTC字符串存储,示例:
const isoStart = startDate.toISOString() // 输出格式:2021-02-02T16:45:28.000Z
const isoEnd = endDate.toISOString()

前端面向用户展示时,再根据用户所在的本地时区,把存储的时间值转换为对应本地时区的字符串即可。


内容的提问来源于stack exchange,提问作者Biku7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.04 05:24:05