我要输入公司league 1/31/2014的一部分成绩,
结果老是说Event Date cannot be a future date
只好翻了下source 貌似是这样:
lastEvent="1/31/2014"
eventDate="1/31/2014"
curDate="2/1/2014"
if(dateStringCompare(lastEvent, eventDate) <= 0) {
if(dateStringCompare(eventDate, curDate) <= 0)
document.frmSubmitResults.submit();
else
alert("Event Date cannot be a future date");
}
估计dateStringCompare默认把2/1/2014 interpret成1月2号了?
fyi:
dateStringCompare("1/31/2014", "2/1/2014")
answer: 1
dateStringCompare("1/31/2014", "2/31/2014")
answer: -1
我不熟悉javascript programming,有没有办法在browser里绕过这个buggy的check?
我在console执行document.frmSubmitResults.submit();的话报很奇怪的错
(我会写信给website owner of coz)
i**********p 发帖数: 1341
2
难道这里打球的没码工?。。
我帮usatt网站debug了一下,it turns out 问题根源是javascript Date object定义
很脑残
new Date(2014, 2, 1)表示March 1, 2014,因为month要从0开始数(哪个猪头的idea..)
new Date(2014, 1, 31)表示Feb 31, 2014,而因为Feb没有31,所以这被转换为March
3, 2014
于是new Date(2014, 2, 1)早于new Date(2014, 1, 31)..
不知道这世界上有多少websites suffer from this. hm..
【在 i**********p 的大作中提到】 : 我要输入公司league 1/31/2014的一部分成绩, : 结果老是说Event Date cannot be a future date : 只好翻了下source 貌似是这样: : lastEvent="1/31/2014" : eventDate="1/31/2014" : curDate="2/1/2014" : if(dateStringCompare(lastEvent, eventDate) <= 0) { : if(dateStringCompare(eventDate, curDate) <= 0) : document.frmSubmitResults.submit(); : else
l*b 发帖数: 5305
3
直觉上不相信javascript的date library有这样的bug
【在 i**********p 的大作中提到】 : 难道这里打球的没码工?。。 : 我帮usatt网站debug了一下,it turns out 问题根源是javascript Date object定义 : 很脑残 : new Date(2014, 2, 1)表示March 1, 2014,因为month要从0开始数(哪个猪头的idea..) : new Date(2014, 1, 31)表示Feb 31, 2014,而因为Feb没有31,所以这被转换为March : 3, 2014 : 于是new Date(2014, 2, 1)早于new Date(2014, 1, 31).. : 不知道这世界上有多少websites suffer from this. hm..
i**********p 发帖数: 1341
4
我老coding可是1200*2 = 2400 level,很严谨的,不会乱说的
你可以打开browser的console实验这个:
(new Date(2014,1,31)).toString();
再看这个不算太official,但比较权威的网站: http://www.w3schools.com/js/js_obj_date.asp
节选:
In the example below we set a Date object to a specific date (14th January
2010):
var myDate=new Date();
myDate.setFullYear(2010,0,14); //注意month=0而不是1
只要是约定俗成的,0 index 或是 1 index 会有什么问题?javascript最基本的库函
数会有像你说的那样的bug,实在是匪夷所思。
我试了usatt的代码,用的Safari,没有什么问题。你用的什么浏览器?虽然也很匪夷
所思,会不会是你的浏览器的javascript的intepreter有bug?
你可以试一下下面的代码,我从usatt网页上copy来的,如果你按button之后,在对话
框上看到的不是今天的日期,那就是你的浏览器有问题,
【在 i**********p 的大作中提到】 : 我老coding可是1200*2 = 2400 level,很严谨的,不会乱说的 : 你可以打开browser的console实验这个: : (new Date(2014,1,31)).toString(); : 再看这个不算太official,但比较权威的网站: : http://www.w3schools.com/js/js_obj_date.asp : 节选: : In the example below we set a Date object to a specific date (14th January : 2010): : var myDate=new Date(); : myDate.setFullYear(2010,0,14); //注意month=0而不是1
i**********p 发帖数: 1341
6
我没说javascript library有bug,我说的是usatt网站的bug. more specifically:
1. javascript library interface design很误导,month从开始,day从1开始,这是
不坑人是什么
2. 注意我post的title是"usatt league网站的bug"。usatt网站没有意识到month从0开
始,默认从1开始,这个inconsistency是个bug
FYI,bug出在usatt网站的dateStringCompare里用了
var date1 = new Date(year1, month1, day1);
var date2 = new Date(year2, month2, day2);
我几个小时之前给他们写信后,建议了fix (把month -1)。他们承认了这个问题,号称
已经fix了,你可以去check dateStringCompare是不是修正了(我没去check过)。估
计你试的时候已经是after fix了,所以正常。
// 这和浏览器无关。大浏览器的javascript interpreter是不会在这上面出bug的