0

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

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

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

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

4

2 回答 2

1

仅给出两位数的日期时,1913 年是一个非常好的猜测。浏览器无法知道您的网站要求的日期类型。例如,如果您要询问用户的出生日期,1913 年会是一个更好的猜测,因为 2013 年出生的人还不足以使用该网站。

我可以理解为什么您可能期望它猜测 2013 年,但仅考虑两位数,不可能合理地期望它每次都正确。这对某人来说是错误的。

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

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

  • 与此同时,网站应该是由知道这一点的作者编写的,并且可能会采取一些技巧,比如将价值加 100 来解决这个问题。

  • 这意味着如果发布的新版本的浏览器改变了这种行为,它将破坏那些旧网站。

  • 由于这种事情,微软尤其倾向于对改变现有行为非常保守。因此,他们会让它像往常一样工作。

这里真正的解决方案是不使用两位数的日期。只需首先指定四位数字,就不会出现任何问题。

然而,这并不是完整的画面,因为部分问题归结于缺乏与类的跨浏览器一致性Date。您可能会发现给两个浏览器提供相同的日期字符串会给您不同的值。

出于这个原因,我建议根本不要使用内置的 JavascriptDate类,而是使用现有的库之一来帮助解决这个问题。

我可以推荐的两个库是Date.jsMoment.js

这两个库都允许您指定日期,并指定您使用的格式。它们还将在所有浏览器中始终如一地工作,并且当您仅指定两位数字时,它们也更有可能给您正确的答案(尽管您仍然会有歧义和可能的错误,所以我仍然推荐使用四位数)。

希望有帮助。

于 2013-11-07T13:25:48.883 回答
0

相同的功能在 IE 中运行良好,请在此处查看小提琴:

<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 年

于 2013-11-07T12:29:01.463 回答