将DDMMYY号码转换为日期吗?

将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); 
} 
+0

为什么不转210710成字符串,然后做parseNumber上子让你的价值观?可能效率较低,但似乎更容易思考。 – 2010-07-21 03:36:27

+0

你看过JS的[Date Object](http://www.w3schools.com/jsref/jsref_obj_date.asp)吗? – NullUserException 2010-07-21 03:41:07

+0

你接受了一个答案,但我提供了一个使用Date对象的方法,它检出它,并检查NullUserException所具有的链接。使用日期对象可能会更容易,然后尝试自己解析数据。 – qw3n 2010-07-21 17:59:37

一个问题:你缺少一个括号。改变:

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,原因有两个:

  1. 数字排序匹配日期排序;和

  2. 这是毫不含糊的。北美人前一个​​月(即MMDDYY)。世界上其他人都首先把日子放在首位(即DDMMYY)。没有人会做YYDDMM。

+0

是的,我很累,完全错过了那一个。非常感谢! – 2010-07-21 03:40:01

+0

谢谢,cletus!你编辑的答复是非常有用的,对我来说是一个很好的学习经历。 – 2010-07-21 03:55:56

+0

我首先选择整数的唯一原因是在后面的函数中进行时间比较,以确定两个日期之间的时间量。至于第二点,我意识到这个错误,并已改变它在服务器上。再一次感谢你的帮助! – 2010-07-21 04:04:17

我想用% - modulo:X modulo 100丢弃除最后2位数以外的任何东西。有用!

也使用floorround

+0

好的,谢谢你的提示。将进行更改。 – 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); 
    }