You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Karate框架或JS中如何将epoch时间戳转换为指定格式日期

Epoch秒级时间戳转指定格式日期实现方案

核心前置说明:你给出的时间戳1685595600是秒级Unix时间戳,JS原生Date对象默认接收毫秒级时间戳,转换前必须乘以1000做单位换算,否则会得到1970年附近的错误结果。另外JS中Date的月份返回值范围是0-11,需要手动+1才是自然月数值,个位数的日、月要补前导零才能满足两位输出要求。

原生JavaScript环境实现

直接用原生Date API即可,不需要引入第三方依赖:

const targetTimestamp = '1685595600';
// 转数字、乘1000转毫秒生成日期实例
const d = new Date(Number(targetTimestamp) * 1000);
// 补零处理日、月字段
const day = String(d.getDate()).padStart(2, '0');
const month = String(d.getMonth() + 1).padStart(2, '0');
const year = d.getFullYear();
// 拼接为要求的格式
const output = `date = ${day} Month = ${month} year = ${year}`;

console.log(output); // 打印结果:date = 01 Month = 06 year = 2023

如果运行环境不支持padStart(非常老的JS版本),可以手动写补零逻辑:

const pad2 = num => num < 10 ? `0${num}` : num;
const day = pad2(d.getDate());
const month = pad2(d.getMonth() + 1);

Karate框架环境实现

Karate内置了JS运行引擎,同时支持直接调用Java时间API,两种写法都可以。

写法1:纯JS逻辑(和原生JS逻辑一致)

直接在feature文件中定义转换函数即可:

Feature: 时间戳转换示例
Scenario: 转换epoch时间戳为指定格式
  * def rawTs = '1685595600'
  * def tsConvert =
  """
  function(ts) {
    const pad2 = n => n < 10 ? '0' + n : n;
    const d = new Date(Number(ts) * 1000);
    const day = pad2(d.getDate());
    const month = pad2(d.getMonth() + 1);
    const year = d.getFullYear();
    return 'date = ' + day + ' Month = ' + month + ' year = ' + year;
  }
  """
  * def convertResult = tsConvert(rawTs)
  * print convertResult // 控制台输出:date = 01 Month = 06 year = 2023
  * match convertResult == 'date = 01 Month = 06 year = 2023'

写法2:调用Java时间API(规避时区偏差)

接口测试场景下如果需要固定时区保证结果一致性,可以直接调用Java 8+内置的时间API,不受运行环境本地时区影响:

* def rawTs = '1685595600'
// 生成指定时区的时间实例,按需替换为业务需要的时区比如Asia/Shanghai
* def zonedTime = java.time.Instant.ofEpochSecond(Number(rawTs))
    .atZone(java.time.ZoneId.of('UTC'))
* def day = String.format('%02d', zonedTime.getDayOfMonth())
* def month = String.format('%02d', zonedTime.getMonthValue())
* def year = zonedTime.getYear()
* def convertResult = 'date = ' + day + ' Month = ' + month + ' year = ' + year

踩坑提示:如果转换后月份不对,先检查是不是忘了给getMonth()的返回值+1;如果年份不对、日期差几十年,先检查是不是没把秒级时间戳乘1000转成毫秒。

内容的提问来源于stack exchange,提问作者Rahul M Rahate

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:18:26