Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.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格式对日期进行排序,格式为dd/mm/yyyy_Javascript_Sorting_Date - Fatal编程技术网

以Javascript格式对日期进行排序,格式为dd/mm/yyyy

以Javascript格式对日期进行排序,格式为dd/mm/yyyy,javascript,sorting,date,Javascript,Sorting,Date,我对函数排序日期有点问题。我想按ASC或DESC对所有日期进行排序,但排序不正确 我的约会对象 函数排序 或替代品 b.sort((b, a) => { if (b > a) { return 1; } if (b < a) { return -1; } return 0; }) 切勿使用新的Datestring构造函数或解析日期字符串,因为这两种方法都不允许您提供特定的格式或区域设置信息 JavaScript的新Datestring和Date.pars

我对函数排序日期有点问题。我想按ASC或DESC对所有日期进行排序,但排序不正确

我的约会对象

函数排序

或替代品

b.sort((b, a) => {
 if (b > a) {
   return 1;
 }
 if (b < a) {
   return -1;
 }
 return 0;
})
切勿使用新的Datestring构造函数或解析日期字符串,因为这两种方法都不允许您提供特定的格式或区域设置信息

JavaScript的新Datestring和Date.parsestring函数倾向于使用用户计算机的区域设置来解析日期-如果用户使用的是Windows的en-US设置,而没有意识到,则Date.parsestring和新Datestring会将日期解释为MM/dd/yyyy,而不是其正确的区域设置。然而,浏览器倾向于尝试解析你向他们抛出的任何东西,如果他们看到2019年12月31日或2019年12月31日,那么无论他们的计算机区域设置如何,他们都会被解析为2019-12-31——只有在2019年7月5日给出时,事情才会分崩离析,例如,如果他们在美国,将被解释为2019-05-07;如果他们在英国,将被解释为2019-07-05

不幸的是,您需要手动解析它们,或者使用类似于Moment.JS的同行评审库,因为编写日期库很困难

切勿使用新的Datestring构造函数或解析日期字符串,因为这两种方法都不允许您提供特定的格式或区域设置信息

JavaScript的新Datestring和Date.parsestring函数倾向于使用用户计算机的区域设置来解析日期-如果用户使用的是Windows的en-US设置,而没有意识到,则Date.parsestring和新Datestring会将日期解释为MM/dd/yyyy,而不是其正确的区域设置。然而,浏览器倾向于尝试解析你向他们抛出的任何东西,如果他们看到2019年12月31日或2019年12月31日,那么无论他们的计算机区域设置如何,他们都会被解析为2019-12-31——只有在2019年7月5日给出时,事情才会分崩离析,例如,如果他们在美国,将被解释为2019-05-07;如果他们在英国,将被解释为2019-07-05

不幸的是,您需要手动解析它们,或者使用类似于Moment.JS的同行评审库,因为编写日期库很困难


这是因为日期是英国格式的,所以它将按升序日期排序,而不考虑月份或年份。如果将它们转换为YYYY-MM-DD格式,它将为您正确排序:

假设a=[2019年12月3日、2020年10月17日、2019年12月2日、2019年12月8日、2020年2月13日];//等 函数ukToUsDateukDate{ 设dateArr=ukDate.split'/'; 返回`${dateArr[2]}-${dateArr[1]}-${dateArr[0]}`; } 对于let i=0;i{ 如果b>a{ 返回1; } 如果b这是因为日期是英国格式的,所以它将按升序日期排序,而不考虑月份或年份。如果将它们转换为YYYY-MM-DD格式,它将为您正确排序:

假设a=[2019年12月3日、2020年10月17日、2019年12月2日、2019年12月8日、2020年2月13日];//等 函数ukToUsDateukDate{ 设dateArr=ukDate.split'/'; 返回`${dateArr[2]}-${dateArr[1]}-${dateArr[0]}`; } 对于let i=0;i{ 如果b>a{ 返回1; } 如果b
如果date1大于1,则返回1。如果日期2更大,则返回-1。

向投票人解释:你能为我们其他人解释OP的意思吗?OP的系统以MM/dd/yyyy格式解释日期,并按该顺序排序,而不是将其解析为dd/MM/yyyyy,这是OP的意向。对投票人说:你能为我们其他人解释一下OP的意思吗?从上下文中可以清楚地看出,OP的系统是以MM/dd/yyyy格式解释日期,并按该顺序排序,而不是将其解析为dd/MM/yyyy,这是OP的意图。谢谢你的帮助,这是用其他格式转换我的日期,但这很好:@Valentin还有什么其他格式的日期?你在帖子中没有提到这一点。谢谢你的帮助,它可以将我的约会转换为其他格式,但这很好:@Valentin还有什么其他格式的约会?你在帖子里没提到。
b.sort((d1, d2) => new Date(d1).getTime() - new Date(d2).getTime());
b.sort((b, a) => {
 if (b > a) {
   return 1;
 }
 if (b < a) {
   return -1;
 }
 return 0;
})
let dates = [ "03/12/2019", "17/10/2020", "02/12/2019", ... ];

function parseDate( ddMMyyyy ) {

    const components = ddMMyyyy.split( '/' );
    if( components.length != 3 ) return null; 

    const dd   = parseInt( components[0] );
    const MM   = parseInt( components[1] );
    const yyyy = parseInt( components[2] );

    // Component range checking:
    if( dd >= 1 && dd <= 31 && MM >= 1 && MM <= 12 && yyyy >= 0 && yyyy <= 9999 ) {
        return new Date( yyyy, MM - 1, dd ); // `MM - 1` because JavaScript months are 0-based.
    } 
    else {
        return null;
    }
}

let sortedParsedDates = dates
    .map( parseDate )
    .filter( dt => dt instanceof Date )
    .sort( ( x, y ) => x.getTime() - y.getTime() );
const sortDate = (date1,date2) => {
const a = date1.split("/").map((i) => parseInt(i));
const b = date2.split("/").map((i) => parseInt(i));
return a[2] > b[2]
  ? 1
  : a[2] < b[2]
  ? -1
  : a[1] > b[1]
  ? 1
  : a[1] < b[1]
  ? -1
  : a[0] > b[0]
  ? 1
  : a[0] < b[0]
  ? -1
  : -1;
};
sortDate("01/11/2011","23/02/2010"); //returns 1