Javascript 将输入格式从M/D/YYYY设置为YYYYMMDD

Javascript 将输入格式从M/D/YYYY设置为YYYYMMDD,javascript,Javascript,编写一个函数,将格式为M/D/YYYY的用户输入日期转换为API要求的格式(YYYYMMDD)。参数“userDate”和返回值是字符串 例如,它应该将用户输入的日期转换为适用于API的“20141231” function formatDate(userDate) { userDate = new Date(); y = userDate.getFullYear(); m = userDate.getMonth(); d = userDate.getD

编写一个函数,将格式为M/D/YYYY的用户输入日期转换为API要求的格式(YYYYMMDD)。参数“
userDate
”和返回值是字符串

例如,它应该将用户输入的日期转换为适用于API的“20141231”

function formatDate(userDate) 
{
     userDate = new Date();
     y = userDate.getFullYear();
     m = userDate.getMonth();
     d = userDate.getDate();

     return y + m + d;
}
我的代码有什么问题吗


无法通过联机测试。

代码有五个问题

  • 它忽略输入参数并使用当前时间(
    Date()
  • 它假设它运行的计算机使用m/d/y日期格式来解析字符串(如果它实际会解析字符串的话)
  • getMonth
    方法返回的是月份索引,而不是月份号,因此必须向其中添加一个
  • 它使用加法将值放在一起,而不是字符串串联
  • 它不会将月份和日期格式化为两位数
忽略日期格式问题,其他问题可通过以下方式解决:

function formatDate(userDate) {
  userDate = new Date(userDate);
  y = userDate.getFullYear().toString();
  m = (userDate.getMonth() + 1).toString();
  d = userDate.getDate().toString();
  if (m.length == 1) m = '0' + m;
  if (d.length == 1) d = '0' + d;
  return y + m + d;
}
您只需重新排列字符串中的字符,而无需将字符串解析为日期并再次将其格式化为字符串。这避免了日期格式问题:

function formatDate(userDate) {
  var parts = userDate.split('/');
  if (parts[0].length == 1) parts[0] = '0' + parts[0];
  if (parts[1].length == 1) parts[1] = '0' + parts[1];
  return parts[2] + parts[0] + parts[1];
}

遵循代码中的注释-一步一步地展示解决问题的一种方法

//函数shell。接受参数userDate,返回一个值
函数formatDate(userDate){
//步骤1:尝试将参数转换为日期!
var returnDate=新日期(userDate);
//第二步:现在这是一个日期,我们可以抓取日期、月份和年份
//轻松一点!
var y=returnDate.getFullYear();
var m=returnDate.getMonth()+1;//步骤6
var d=returnDate.getDate();
//步骤3:我们在上面所做的位返回了整数值
//*格式化*,我们应该真正使用字符串
y=y.toString();
m=m.toString();
d=d.toString();
//步骤4:月和日变量的值可以是1或2
//数字长。我们需要强制它们始终为2位数。
//实现这一点的方法有很多。这里只有一个选项:
如果(m.length==1){
m='0'+m;
}
如果(d.length==1){
d='0'+d;
}
//步骤5:将新的字符串值重新组合在一起!
返回日期=y+m+d;
//步骤6:您是否注意到输出值有问题?
//月份错误!这是因为getMonth()返回一个值
//介于0和11之间,即每次偏移1!
//回顾第2步,看看额外的代码
//第七步:看起来不错,是吗?嗯,它可能会通过你的测验
//问题,但它仍然不完美。
//你知道为什么吗?
//那么,它假设参数值为
//a)始终为实际日期(例如,不是“dave”)
//b)我们的步骤1正确地转换了值(例如,客户,其中
//JS运行时,使用日期格式(m/d/y)。
//我在英国,英国不喜欢m/d/y,所以我的成绩会很好
//和你的不一样!
//我不打算在这里解决这个问题,但这更值得你们思考。
/考虑它额外的信用!
返回日期;
}
//在第页-->
document.getElementById(“结果”).innerText+=格式日期(“2015年1月1日”)

Result:
如果将
+
用于整数,则必须将它们转换为字符串

function formatDate(userDate) {
  userDate = new Date(userDate);

  y = userDate.getFullYear();
  m = userDate.getMonth() + 1;
  d = userDate.getDate();

  return y.toString() +
         ('0' + m.toString()).slice(-2) +
         ('0' + d.toString()).slice(-2);
}
另外,还需要将前导零添加到月和日

示例:

console.log(格式化日期('2/12/2015')

将写入日志
20150212

console.log(格式化日期('1/1/2015')

将写入日志
20150101

function formatDate(userDate) {
  // format from M/D/YYYY to YYYYMMDD
  var oldDate = String(userDate).split('/');
  if (oldDate[0].length==1)oldDate[0]='0'+oldDate[0];
  if (oldDate[1].length==1)oldDate[1]='0'+oldDate[1];
  var newDate = [oldDate[2], oldDate[0], oldDate[1]];
  return newDate.join('');
}

console.log(formatDate("12/31/2014"));
更多详情:

(1) userDate=新日期(userDate)=>创建日期对象的实例

(2) getFullYear()是从userDate获取年份。类似地,user.getMonth()表示月份,userDate.getDate()表示日期……我在月份中添加了+1,因为月份返回值为0,也就是说,对于第6个月,它返回5,所以添加了1

(3) 在返回报表中,年+月+日期在有十个条件检查月或日期是否为1或3等一位数的情况下完成,然后在其前面添加0,使其成为01或03。

函数formatDate(userDate){
function formatDate(userDate) {
    var first  = userDate.indexOf("/");
    var last   = userDate.lastIndexOf("/");
    var months = userDate.substring(0, first);
    var years  = userDate.substring(last + 1);
    var days   = userDate.substring(last, 3);
    return (years + months + days);
}

console.log(formatDate("12/31/2014"));
//格式从M/D/YYYY到YYYYMMDD 让数组=userDate.split(“/”); while(数组[0]。长度<2){ 数组[0]=“0”+数组[0]; } while(数组[1]。长度<2){ 数组[1]=“0”+数组[1]; } 设arrayAnswer=array[2]+array[0]+array[1]; 返回arrayAnswer; } 控制台日志(格式日期(“2014年1月3日”); //输出必须等于20140103
作为一个初学者,这是我能做到这一点的最简单的方法。对我来说,将其拆分,添加0,然后将其排序到正确的位置更有意义

function formatDate(userDate) {
  let userdate = userDate.split('/');

  let [month, day, year] = userdate;

  if (day.length === 1) {
    day = `0${day}`;
  }

  if (month.length === 1) {
    month = `0${month}`;
  }

  return `${year}${month}${day}`;

}

console.log(formatDate("12/1/2014"));
函数formatDate(userDate){
//格式从M/D/YYYY到YYYYMMDD
设[月、日、年]=userDate.split(“/”);
月=(月长===1)?“0”+月:月;
日期=(日期.长度===1)?“0”+日期:日期;
返回年份+月份+日期
}

控制台日志(格式日期(“2014年1月31日”)考虑:
1/1/2015
。此函数用于将其转换为
201511
(如果字符串串联)或
2017
(如果使用算术),这与
MMDD
部分不匹配(缺少前导零)!实际上,你的函数没有格式化任何内容,它用一个新日期覆盖传递的参数,并对该日期的部分内容进行计算。@MCJames你说过这是用于在线测试的。我是在向你指出答案的方向,而不是给你答案。再试一次,看看你得到了什么to@gvee是的,但在此之前,OP必须解析传递的字符串,这是整个家庭作业思想的一大部分。@Teemu我知道,我不想泄露整个游戏
;-)此为
function formatDate(userDate) {
  // format from M/D/YYYY to YYYYMMDD
    let array = userDate.split("/");
    while(array[0].length < 2) {
        array[0] = "0" + array[0];
    }
    while(array[1].length < 2) {
        array[1] = "0" + array[1];
    }
    let arrayAnswer = array[2]+ array[0]+ array[1];
    return arrayAnswer;
} 

console.log(formatDate("1/3/2014"));
//output must equal 20140103
function formatDate(userDate) {
  let userdate = userDate.split('/');

  let [month, day, year] = userdate;

  if (day.length === 1) {
    day = `0${day}`;
  }

  if (month.length === 1) {
    month = `0${month}`;
  }

  return `${year}${month}${day}`;

}

console.log(formatDate("12/1/2014"));
function formatDate(userDate) {
    const month = userDate.substr(0, 2)
    const day = userDate.substr(3, 2)
    const year = userDate.substr(6)
    return year + month + day
}
console.log(formatDate("12/31/2014"));