将DDMMYY号码转换为日期吗?
我是JavaScript新手(但不是编程),我很难弄清楚我在这个函数中犯了什么错误,在这里找到:http://mikeryan.webatu.com/function.html[死链接] [底部原始代码的猜测]将DDMMYY号码转换为日期吗?
该函数应采用DDMMYY时间戳,并将其转换为人类可读字符串。例如,210710
将变成July 21st, 2010
。
UPDATE:代码这可能是类似的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);
}
一个问题:你缺少一个括号。改变:
var year = (d-(Math.round(d/100)*100);
到
var year = (d-(Math.round(d/100)*100));
如此说来,这是一个更简单的计算方法:
var year = d % 100;
var month = Math.floor(d/100) % 100;
var day = Math.floor(d/10000) % 100;
接着,您的数组初始化是不必要的冗长。相反的:
var arr = new Array();
arr[0] = "foo";
arr[1] = "bar";
只是做:
var arr = ["foo", "bar"];
你一天后缀不正确。它在12和12月4日后显示“nd”显然不正确。我只是用逻辑来做这件事,而不是使用大多数元素都是“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);
}
最后是在你的“时间戳”是目前形式的整数价值不大。这种类型的东西更典型的格式是YYYYMMDD,原因有两个:
数字排序匹配日期排序;和
这是毫不含糊的。北美人前一个月(即MMDDYY)。世界上其他人都首先把日子放在首位(即DDMMYY)。没有人会做YYDDMM。
是的,我很累,完全错过了那一个。非常感谢! – 2010-07-21 03:40:01
谢谢,cletus!你编辑的答复是非常有用的,对我来说是一个很好的学习经历。 – 2010-07-21 03:55:56
我首先选择整数的唯一原因是在后面的函数中进行时间比较,以确定两个日期之间的时间量。至于第二点,我意识到这个错误,并已改变它在服务器上。再一次感谢你的帮助! – 2010-07-21 04:04:17
我想用%
- modulo:X modulo 100丢弃除最后2位数以外的任何东西。有用!
也使用floor
不round
好的,谢谢你的提示。将进行更改。 – 2010-07-21 03:40:29
使用日期对象。速度快了很多。这是一个假设年份将在2000年代的快速示例,因此您需要进行一些修改。输出结果并不完全符合您的要求,但它非常接近,代码缩短了很多。
function date(e){
var d = new Date();
d.setYear(2000+e.substring(4)/1,e.substring(2,4)-1,e.substring(0,2)-1);
alert(d.toDateString());
}
首先使用Math.floor来获取小数点的底值,然后在函数中出现一些拼写错误。这里是工作的代码(注意:只是一对夫妇的实例进行测试),但应该足以让你开始:
function timestamp(d){
var year = (d-(Math.floor(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);
}
为什么不转210710成字符串,然后做parseNumber上子让你的价值观?可能效率较低,但似乎更容易思考。 – 2010-07-21 03:36:27
你看过JS的[Date Object](http://www.w3schools.com/jsref/jsref_obj_date.asp)吗? – NullUserException 2010-07-21 03:41:07
你接受了一个答案,但我提供了一个使用Date对象的方法,它检出它,并检查NullUserException所具有的链接。使用日期对象可能会更容易,然后尝试自己解析数据。 – qw3n 2010-07-21 17:59:37