我是JavaScript的新手(但不是编程),我很难搞清楚我在这个函数中犯了哪个错误,在这里找到:http ://mikeryan.webatu.com/function.html [dead link] [猜测底部的原始代码]
该函数应采用DDMMYY时间戳并将其转换为人类可读的字符串.例如,210710将变成July 21st, 2010.
更新:代码可能类似OP的死链接:
function timestamp(d){
var year = (d-(Math.round(d / 100)*100);
var day = Math.floor(d/10000);
var dayfix = (day - (Math.floor(day/10)*10));
// var month = ((d-year)-(day*100000)/100);
var a = (d - year);
var b = ((day * 100000) / 10);
var month = (a - b) / 100;
var months = new Array();
months[1] = "January";
months[2] = "February";
months[3] = "March";
months[4] = "April";
months[5] = "May";
months[6] = "June";
months[7] = "July";
months[8] = "August";
months[9] = "September";
months[10] = "October";
months[11] = "November";
months[12] = "December";
var daysuffix = new Array();
daysuffix[0] = "th";
daysuffix[1] = "st";
daysuffix[2] = "nd";
daysuffix[3] = "rd";
daysuffix[4] = "th";
daysuffix[5] = "th";
daysuffix[6] = "th";
daysuffix[7] = "th";
daysuffix[8] = "th";
daysuffix[9] = "th";
if(year>20){
year = '19' + year;
}
else{
year = '20' + year;
}
return (months[month] + ' ' + day + daysuffix[dayfix] + ', ' + year);
}
Run Code Online (Sandbox Code Playgroud)
一个问题:你错过了一个括号.更改:
var year = (d-(Math.round(d / 100)*100);
Run Code Online (Sandbox Code Playgroud)
至
var year = (d-(Math.round(d / 100)*100));
Run Code Online (Sandbox Code Playgroud)
话虽这么说,这是一种更直接的计算方法:
var year = d % 100;
var month = Math.floor(d / 100) % 100;
var day = Math.floor(d / 10000) % 100;
Run Code Online (Sandbox Code Playgroud)
接下来,您的数组初始化是不必要的冗长.代替:
var arr = new Array();
arr[0] = "foo";
arr[1] = "bar";
Run Code Online (Sandbox Code Playgroud)
做就是了:
var arr = ["foo", "bar"];
Run Code Online (Sandbox Code Playgroud)
您的日期后缀不正确.它将"nd"置于12和"4月12日"之后显然不正确.我只是使用逻辑来做这个而不是查找数组,其中大多数元素都是"th".
所以:
function timestamp(d){
var year = d % 100;
var month = Math.floor(d / 100) % 100;
var day = Math.floor(d / 10000) % 100;
var months = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"];
if (year>20) {
year = '19' + year;
} else {
year = '20' + year;
}
if (day == 1 || day == 21 || day == 31) {
var suffix = "st";
} else if (day == 2 || day == 22) {
var suffix = "nd";
} else {
var suffix = "th";
}
return (months[month-1] + ' ' + day + suffix + ', ' + year);
}
Run Code Online (Sandbox Code Playgroud)
最后,您的"时间戳"在其当前形式中是一个整数,几乎没有价值.YYYYMMDD更典型的格式是YYYYMMDD,原因有两个:
数字排序符合日期排序; 和
这是毫不含糊的.北美人前一个月(即MMDDYY).世界上的其他人都把第一天放在第一位(即DDMMYY).没有人做YYDDMM.