我有一个函数,可以计算给定时间戳在用户本地时区解析的日期(YYYY-MM-DD)。例如:2019-12-31T23:30:00.000Z
解析为2020-01-01
on UTC+1
,但解析为2019-12-31
on UTC-1
。
这是我的实现:
function calcLocalYyyyMmDd(dateStr) {
const date = new Date(dateStr);
const year = String(date.getFullYear()).padStart(4, "0");
const month = String(date.getMonth() + 1).padStart(2, "0");
const day = String(date.getDate()).padStart(2, "0");
return `${year}-${month}-${day}`;
}
这按预期工作,但是,我想在单元测试中验证此行为(使用笑话,不确定是否相关)。
describe("calcLocalYyyyMmDd", () => {
test("calculates correct date on UTC+1", () => {
// TODO mock local timezone
const result = calcLocalYyyyMmDd("2019-12-31T23:30:00.000Z");
expect(result).toBe("2020-01-01");
});
test("calculates correct date on UTC-1", () => {
// TODO mock local timezone
const result = calcLocalYyyyMmDd("2020-01-01T00:30:00.000Z");
expect(result).toBe("2019-12-31");
});
});
如何模拟当地时区?
不幸的是,没有简单的方法可以做到这一点。
但是,如果您使用的是Linux系统,则可以TZ
在启动浏览器或启动Node.js之前设置环境变量,但是一旦进程运行,便无法更改时区。该Date
对象仅使用系统的本地时区。
请注意,由于时区实现的复杂性,该方法在Windows上不可靠。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句