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

K6时区支持问题:获取欧洲/伦敦时区时间失败

K6获取欧洲/伦敦时区时间失效的解决办法

问题根源

你的代码里toLocaleString的timeZone参数被忽略,是因为当前K6版本对该方法的实现存在限制——根据K6文档说明:

toLocaleDateString() 方法返回一个带有语言敏感的日期部分表示的字符串。新增的 locales 和 options 参数允许应用指定使用其格式化约定的语言,并允许自定义函数行为。在旧版本实现中,会忽略 locales 和 options 参数,使用的区域设置及返回字符串的形式完全取决于实现。

旧版K6的V8引擎实现不支持options中的时区配置,所以会直接返回本地机器时区的时间。

两种解决思路

1. 升级K6到最新版本

如果你的K6版本较老,直接升级到最新稳定版即可。新版本的K6已经完善了对toLocaleString时区参数的支持,升级后你的原代码就能正常输出伦敦时区的时间。

2. 手动计算伦敦时区时间(兼容旧版本)

如果暂时无法升级,可以通过UTC时间结合夏令时判断来手动计算伦敦时间:

// 获取欧洲/伦敦时区的当前时间,兼容K6旧版本
function getLondonCurrentTime() {
    const now = new Date();
    // 转换为UTC时间戳
    const utcMs = now.getTime() + now.getTimezoneOffset() * 60000;
    
    // 判断伦敦是否处于夏令时(每年3月最后一个周日到10月最后一个周日)
    const year = now.getUTCFullYear();
    const marchLastSun = new Date(Date.UTC(year, 2, 31 - (new Date(Date.UTC(year, 2, 31)).getUTCDay() + 6) % 7));
    const octLastSun = new Date(Date.UTC(year, 9, 31 - (new Date(Date.UTC(year, 9, 31)).getUTCDay() + 6) % 7));
    const isDST = new Date(utcMs) >= marchLastSun && new Date(utcMs) < octLastSun;
    
    // 伦敦时区偏移:夏令时+1小时,非夏令时+0小时
    const londonMs = utcMs + (isDST ? 3600000 : 0);
    const londonDate = new Date(londonMs);
    
    // 格式化为en-GB格式的字符串
    return londonDate.toLocaleString('en-GB');
}

console.log(getLondonCurrentTime());

验证方式

  • 升级K6后运行原代码,对比输出时间与伦敦本地时间是否一致
  • 使用手动计算方法时,可打印UTC时间和计算后的伦敦时间,验证偏移是否正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:36:12