在Chrome中,我们有些奇怪
> new Date("2014-01-01") - new Date("2014/01/01")
< 3600000
Run Code Online (Sandbox Code Playgroud)
这是因为
new Date("2014-01-01")
Wed Jan 01 2014 01:00:00 GMT+0100 (CET)
Run Code Online (Sandbox Code Playgroud)
而
new Date("2014/01/01")
Wed Jan 01 2014 00:00:00 GMT+0100 (CET)
Run Code Online (Sandbox Code Playgroud)
为什么' - '似乎增加1小时的时间?
我没能在IE8和Safari 5上解析ISO-8601日期"2011-04-26T13:16:50Z",但它适用于Chrome 10,FF4.支持似乎很混杂?
有谁知道哪些浏览器可以解析这种格式的实际状态?我假设IE6,7也会失败.
var d = Date.parse("2011-04-26T13:16:50Z");
Run Code Online (Sandbox Code Playgroud) 我的代码在Google Chrome中正常运行,但在Safari中则无法运行.
我发现我需要转换yyyy-MM-dd HH:mm:ss为ISO 8601,但我没有找到解决方案来做到这一点.
在线测试链接:http://jsfiddle.net/UVgHR/
使用Javascript:
$(document).ready(function() {
calculateMinutes();
setInterval(calculateMinutes, 60000);
});
function calculateMinutes() {
$('.calculateMinutes').each(function () {
var diff = Math.abs(new Date( $(this).data('timestamp') ) - new Date());
var minutes = Math.floor((diff/1000)/60);
$(this).html( minutes + ' min.' );
});
}
Run Code Online (Sandbox Code Playgroud)
HTML示例:
<span class="calculateMinutes" data-timestamp="2014-02-18 15:00:48">
Run Code Online (Sandbox Code Playgroud) 我正在尝试从字符串创建日期对象.我得到ISO格式的日期,除了像"2012-01-30T16:23:12"的毫秒部分
当我在IE,Chrome和Firefox中运行以下代码时,结果会有所不同(链接到小提琴)
currentDate = "2012-01-30T16:23:12";
var date = new Date(currentDate);
alert(date);
Run Code Online (Sandbox Code Playgroud)
IE和Chrome将字符串视为UTC,但firefox在本地时区考虑.
除了在任何地方检查用户代理之外,有没有通用的方法来解决它?
我在Chrome浏览器中发现了一些奇怪的Date行为(版本74.0.3729.131(官方内部版本)(64位))。在Chrome开发者控制台中执行了以下javascript:
new Date('1894-01-01T00:00:00+01:00')
// result: Mon Jan 01 1894 00:00:00 GMT+0100 (Central European Standard Time)
new Date('1893-01-01T00:00:00+01:00')
// result: Sat Dec 31 1892 23:53:28 GMT+0053 (Central European Standard Time)
Run Code Online (Sandbox Code Playgroud)
尽管已经提供了有效的ISO8601值,但我已经在不同的浏览器中通过Date ctor阅读了有关非标准日期解析的信息。但这不仅仅是奇怪的o_o
在Firefox(Quantum 66.0.3(64位))中,相同的调用会导致预期的Date对象:
new Date('1894-01-01T00:00:00+01:00')
// result: > Date 1892-12-31T23:00:00.000Z
new Date('1893-01-01T00:00:00+01:00')
// result: > Date 1893-12-31T23:00:00.000Z
Run Code Online (Sandbox Code Playgroud)
(new Date('2012-12-01')).getMonth()是10代替11(getMonth为0索引).我已经在Firefox,Chrome和Node.js上测试过了.为什么会这样?
奇怪的是,在不同的浏览器中为新的Date()产生不同的结果.
在Chrome 45.0.2454.101 m中:
new Date(2015,9,1)
Thu Oct 01 2015 00:00:00 GMT+0200 (W. Europe Daylight Time)
Run Code Online (Sandbox Code Playgroud)
在Firefox 40.0.3中(默认检查器/控制台)
new Date(2015,9,1)
Date 2015-09-30T22:00:00.000Z
Run Code Online (Sandbox Code Playgroud)
其他信息
如果我在Firefox中使用FIREBUG扩展控制台进行尝试,那么就像Chrome一样.发生了什么?似乎Firefox没有计算偏移量,实际上它比正确日期落后2小时.我在其他工作站上进行了测试,所有人似乎都有这个"bug".
我实现了一个CSV解析器,该解析器猜测每一列的类型格式,但是我发现JavaScript Date类认为“ TG-1”是有效的日期/时间。
Chrome支持之前,我没有见过这种晦涩的日期格式吗?我认为这不是一个有效日期,而从其他日期来看,ISO标准我没有看到对此的参考。
Chrome 74表示有效。
Firefox 64表示无效。
let validDate = true;
try{
d = new Date("TG-1");
d.toISOString()
}catch(e){
validDate = false
}
console.log(validDate);
Run Code Online (Sandbox Code Playgroud)
任何后跟-数字1-12的字符串均视为有效:
d = new Date("adsfadgag-12")//valid per V8
Run Code Online (Sandbox Code Playgroud)