Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将字符串日期格式化为始终遵循yyyy-mm-dd格式(非历元)_Javascript - Fatal编程技术网

Javascript 将字符串日期格式化为始终遵循yyyy-mm-dd格式(非历元)

Javascript 将字符串日期格式化为始终遵循yyyy-mm-dd格式(非历元),javascript,Javascript,我有3个不同的客户端(Android、iOS和Web),它们都在访问同一个端点,解析一个需要存储为yyyy-mm-dd的日期字符串。Android和iOS日期选择器似乎都在解析正确的格式,但不包括个位数(即2019-8-9,而不是2019-08-09)中的月份和天数的零 js似乎没有解决这个问题的方法。我想要一个解决方案,可以处理服务器端的香草js,以便不需要更新的Android和iOS应用程序的功能,解析数据 这是我目前的解决方案。它本该起作用的。想知道是否有人能想出一个更干净的解决方案 fu

我有3个不同的客户端(Android、iOS和Web),它们都在访问同一个端点,解析一个需要存储为yyyy-mm-dd的日期字符串。Android和iOS日期选择器似乎都在解析正确的格式,但不包括个位数(即2019-8-9,而不是2019-08-09)中的月份和天数的零

js似乎没有解决这个问题的方法。我想要一个解决方案,可以处理服务器端的香草js,以便不需要更新的Android和iOS应用程序的功能,解析数据

这是我目前的解决方案。它本该起作用的。想知道是否有人能想出一个更干净的解决方案

function checkDateFormat(date){
    return new Promise (resolve=>{
        if(date.length == 8){
            // Both month and day are single digits and should be fixed
            var firstFix = date.substr(0, 5) + "0" + date.substr(5);
            var secondFix = firstFix .substr(0, 8) + "0" + firstFix.substr(8);
            resolve(secondFix);
        } else if (date.length == 9){    
            if(date.substr(6,1) == "-"){
                // Month is single digit and should be fixed
                var monthFix = date.substr(0, 5) + "0" + date.substr(5);
                resolve(monthFix);
            } else {
                // Day is single digit and should be fixed
                var dayFix = date.substr(0, 8) + "0" + date.substr(8);
                resolve(dayFix);
            }            
        } else {
            resolve(date);
        }        
    });
}

应该一致地将字符串解析为yyyy-mm-dd,而不是yyyy-m-dd或yyyy-mm-d

如果您知道这是唯一可以预期的格式问题,您可以只制作一个函数,在任何小于10的数字的开头推零,另一个函数拆分字符串,以便解析日期和月份值

let goodDate=“2019-08-09”;
让badDate=“2019-8-9”;
函数paddedZero(str){
返回parseInt(str)>9?str:`0${parseInt(str)}`;
}
函数formatDateStr(str){
让[年、月、日]=str.split(“-”);
返回`${year}-${paddedZero(月)}-${paddedZero(日)}`;
}
console.log(formatDateStr(goodDate));

log(formatDateStr(badDate))如果您知道这是唯一可能出现的格式问题,您可以创建一个函数,在任何小于10的数字的开头插入一个零,再创建一个函数来拆分字符串,以便解析日期和月份值

let goodDate=“2019-08-09”;
让badDate=“2019-8-9”;
函数paddedZero(str){
返回parseInt(str)>9?str:`0${parseInt(str)}`;
}
函数formatDateStr(str){
让[年、月、日]=str.split(“-”);
返回`${year}-${paddedZero(月)}-${paddedZero(日)}`;
}
console.log(formatDateStr(goodDate));

log(formatDateStr(badDate))我会这样做:

function padZero(str) {
  return str.length === 1 ? '0' + str : str;
}

function checkDateFormat(date){
    date = date.split("-");
    date[1] = padZero(date[1]);
    date[2] = padZero(date[2]);
    return date.join("-");
}

我会这样做:

function padZero(str) {
  return str.length === 1 ? '0' + str : str;
}

function checkDateFormat(date){
    date = date.split("-");
    date[1] = padZero(date[1]);
    date[2] = padZero(date[2]);
    return date.join("-");
}

简单正则表达式替换就足够了:


console.log('2000-1-2'。替换(/\b\d\b/g,'0$&'))
简单的正则表达式替换就足够了:


console.log('2000-1-2'.replace(/\b\d\b/g,'0$&'))
首先,我不知道为什么您需要承诺,因为我看不到任何真正的异步代码,但无论如何,核心部分是:

const ensureDateFormat = (date) => 
  new Date(date).toISOString().substr(0, 10);
如果您想要回复承诺,您可以始终回复已解决的承诺:

const ensureDateFormat = (date) => 
  Promise.resolve(new Date(date).toISOString().substr(0, 10));

注意这是假设您没有0年之前或9999年之后的年份。请参见

首先,我不确定您为什么需要承诺,因为我看不到任何真正的异步代码,但无论如何,核心部分是:

const ensureDateFormat = (date) => 
  new Date(date).toISOString().substr(0, 10);
如果您想要回复承诺,您可以始终回复已解决的承诺:

const ensureDateFormat = (date) => 
  Promise.resolve(new Date(date).toISOString().substr(0, 10));

注意这是假设您没有0年之前或9999年之后的年份。参见

承诺是因为我需要解决问题,本应编辑问题但感谢回答,简短但甜蜜的承诺是因为我需要解决问题,本应编辑问题但感谢回答,简短但甜蜜的最干净和最简单的解决方案最干净和最简单的解决方案