Javascript 将输入格式从M/D/YYYY设置为YYYYMMDD
编写一个函数,将格式为M/D/YYYY的用户输入日期转换为API要求的格式(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
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"));