我对一个 Angular 2 应用程序进行了一些测试,这些应用程序在 Firefox 中运行时会传入,但在 PhantomJS 中失败。在测试中,我正在检查日期是否设置正确。我以"2017-07-20T14:20"的形式输入本地 iso 日期字符串。日期部分设置正确,但时间已关闭。我正在山区时区(-6:00 UTC(运行测试,因此时间是08:20。是否有我可能缺少的垫片或设置配置。
下面是一些代码:
在我的自定义日期类文件中
public startTime: string;
public setDate(date: string) {
let date:Date = new Date(date);
this.startTime = date.getHours() + ':';
if (date.getMinutes() < 10) {
this.startTime += date.getMinutes() + '0';
} else {
this.startTime += date.getMinues();
}
}
在我的测试文件中
it('should pass') {
let testDate = new customDate();
testDate.setDate('2017-07-20T14:20');
expect(testDate.startTime).toBe('14:00'); <-- this is failing it's comeing through as ('8:00')
}
在研究旧版本的Chrome和Safari将本地日期时间字符串解析为UTC的类似问题时,我们找到了以下解决方案: Javascript:将字符串解析为日期作为本地时区。事实证明,PhantomJS使用ES5,因此日期时间字符串被解析为UTC而不是本地。链接中的解决方案解释了正在发生的事情以及如何解决它。