IE新日期(MM / dd / yy)格式问题

时间:2013-11-07 12:19:15

标签: javascript internet-explorer

我从“MM / dd / yy”格式的代码中获取日期。我在JavaScript中创建Date对象:

var tempDate = new Date(dateStringInMM/dd/yy)

现在,在IE中,tempDate.getYear()给我“13”,tempDate.getFullYear()给出“1913”作为值。

是否有任何规定在JavaScript中获取IE的“2013”​​?

2 个答案:

答案 0 :(得分:1)

只给出两位数的日期,1913年是一个非常好的猜测。浏览器无法知道您的网站提出的日期类型。例如,如果你要求用户的DOB,那么1913就更好了,因为2013年出生的人还不够老,无法使用该网站。

我可以看到为什么你会猜到它会猜到2013年,但只给出两位数字,我们无法合理地预期它每次都能正确。这对某人来说是错误的。

此行为的实际原因可能是为了向后兼容。

  • 较旧的浏览器版本在给出两位数日期时会猜到19xx。这一天本来是一个完全合理的猜测。

  • 与此同时,网站本来是由知道这一点的作者撰写的,并且可能已经做了一些技巧,比如在价值上加100,以解决这个问题。

  • 这意味着如果发布了一个更新此行为的新版浏览器,它将破坏这些旧网站。

  • 由于这种事情,微软特别倾向于非常保守地改变现有的行为。因此,他们会一如既往地保持工作。

这里真正的解决方案是不使用两位数的日期。只需在第一个位置指定四位数字,就不会有任何问题。

但是,这不是完整的图片,因为问题的部分原因在于缺少与Date类的跨浏览器一致性。您可能会发现为两个浏览器提供相同的日期字符串会为您提供不同的值。

出于这个原因,我建议不要使用内置的Javascript Date类,而是使用其中一个库来帮助解决这个问题。

我推荐的两个图书馆是Date.jsMoment.js

这两个库都允许您指定日期,并指定您正在使用的格式。它们也将在所有浏览器中一致地工作,并且当你只指定一年中的两位数时也更有可能给你正确的答案(虽然你仍然会有歧义和可能的错误,所以我仍然建议使用四位数。)

希望有所帮助。

答案 1 :(得分:0)

同样的功能在IE中工作正常,check fiddle here:

<script>
function myFunction()
{
var d = new Date('11/07/2013');
var x = document.getElementById("demo");
x.innerHTML=d.getFullYear();
}
</script>

<button onclick="myFunction()">Get date</button>
<p id="demo">Click the button to display the full year of todays date.</p>

输出是2013