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
相关产品推荐
相关产品推荐

