Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 新日期()给我错误的年份-Windows 10和VS2015_Javascript_Date_New Operator - Fatal编程技术网

Javascript 新日期()给我错误的年份-Windows 10和VS2015

Javascript 新日期()给我错误的年份-Windows 10和VS2015,javascript,date,new-operator,Javascript,Date,New Operator,当我运行我得到的代码时(Windows 10、VS2015、MVC5、Jquery 3.3.1、Bootstrap 4.1: // javascript var date1 = new Date('1/1/19'); var y = date1.getYear(); var fy = date1.getFullYear(); 根据规范,我应该得到: y = '19' fy = '1919' 我确实去过不同的网站,我运行了上面的代码,得到了正确的结果,但不是来自我的计算机 有人能确认这个问题吗

当我运行我得到的代码时(Windows 10、VS2015、MVC5、Jquery 3.3.1、Bootstrap 4.1:

// javascript
var date1 = new Date('1/1/19');
var y = date1.getYear();
var fy = date1.getFullYear();
根据规范,我应该得到:

y = '19'
fy = '1919'
我确实去过不同的网站,我运行了上面的代码,得到了正确的结果,但不是来自我的计算机

有人能确认这个问题吗?还是只是我的电脑问题?

你可以找到一些信息。例如,你可以找到

上个世纪-一位数和两位数年份将被解释为19xx:

提供完整的日期输入格式规范

简而言之,为了从
getFullYear()
调用中获得
2019
,您应该初始化
Date
实例,提供类似
01/01/2019
的内容

为了避免时区出现问题和误解,请采用一种简单、安全的策略:引用日期,这是由
Date(String)
构造函数支持的


对于高级用途,您可以通过类似的库与日期进行交互,该库提供了一个自定义、简单且可用的API,而不是标准日期API(并提供了一个扩展,用于显式处理时区,如果是这样的话)。

欢迎使用堆栈溢出。当您说“按规范”时,就使用非ISO-8601格式的字符串调用
new Date()
时的行为而言,您指的是哪个规范?我使用Chrome和IE edge浏览器对其进行了测试,他们给出了正确的结果,但没有IE 11(错误-给我错误的年份).当年份为119时,它意味着2019年。当年份为19时,它意味着1919年。这就是我所说的规格。我应该得到119而不是19年。这对IE 11不利。“当年份为19时,它意味着1919年”-是的,这与您创建的日期是1919年,而不是2019年完全一致。这就是为什么您看到的是
fy='1919'
。这就是为什么我问有关规格的问题,关于您如何期望
新日期('1/1/19')
to behave-是什么让你认为它保证返回2019年1月1日而不是1919年1月1日?(如果你使用了
2019-01-01
我怀疑你会从所有浏览器中得到预期的结果。)“1/1/19”可以解析为0019-01-01或1919-01-01或2019-01-01或任何你喜欢的世纪。“您应该初始化日期实例,提供类似2019年1月1日的内容”-我只推荐ISO-8601,这是明确的:“2019-01-01”。如果使用“2019年2月1日”在不同的浏览器上产生不同的结果,例如(有些给出2月1日,有些给出1月2日),我不会感到惊讶。这是IE 11中的一个错误(Javascript版本1.3)。我没有尝试过momen.js。从新日期(“1/1/19”)到新日期(“1/1/49”)将生成日期的3位数字。getYear()是2019-2049。从新日期(“1/1/50”)到新日期(“1/1/99”)只给出了2个数字,这意味着我将得到1950到1999。IE 11完全错了。使用ISO 8601格式也不是一个安全的策略,至少有一个现代浏览器错误地解析ISO 8601格式的日期,而许多旧浏览器根本不解析日期。安装了moment.js并用IE 11、Edge、Chrome和Firefox对其进行测试,我得到了所需的r结果(使用2位数年份,当然使用4位数年份)。
y = "119"
fy = "2019"