将DDMMYY号码转换成日期?

Mik*_*e R 2 javascript

我是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)

cle*_*tus 5

一个问题:你错过了一个括号.更改:

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

  1. 数字排序符合日期排序; 和

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