javascript - 如何比较两个日期是否更接近
问题描述
我想检查两个日期是否在彼此的范围内,并重新排序我的数组。我需要将数组中的日期与当前日期进行比较。
我有这个:
var currentDate = new Date(); /* current date = 2021/08/18 */
listOfObjects = [ { "user": "John", "date": "2021-08-20" }, { "user": "Bob", "date": "2021-08-17" }, { "user": "Joe", "date": "2021-08-09" } ]
返回应该是这样的:
[ { "user": "Bob", "date": "2021-08-17" }, { "user": "John", "date": "2021-08-20" }, { "user": "Joe", "date": "2021-08-09" } ]
解决方案
在 JavaScript 中,数组是通过对其项的文本表示进行排序来进行排序的。
默认排序顺序是升序,将元素转换为字符串,然后比较它们的 UTF-16 代码单元值序列。
(来源:Array.prototype.sort() - JavaScript | MDN)
请参见以下示例:
const numbers = [1, 30, 4, 21, 100000];
numbers.sort();
console.log(numbers);
我们看到输出是具有按字母顺序排列的数字的数组:
1, 100000, 21, 30, 4
在大多数情况下,这不是我们想要的(或大多数人所期望的)。为了对数字进行数字排序,我们传递了一个自定义比较函数来排序:
function i_cmp(a, b) {
let d = a-b;
if (d < 0)
return -1;
if (d > 0)
return 1;
return 0;
}
numbers.sort(i_cmp);
console.log(numbers);
输出:
1,4,21,30,100000
要按取决于进一步条件的标准对数组进行排序,传递绑定到由另一个函数创建的运行时值的函数会很方便。在这里,我们按项目的绝对距离对固定值进行排序x
。
function d_cmp(x) {
return function(a, b) {
let d = Math.abs(a-x)-Math.abs(b-x);
if (d < 0)
return -1;
if (d > 0)
return 1;
return 0;
}
}
numbers.sort(d_cmp(50));
console.log(numbers);
输出:
30,21,4,1,100000
Hemera 已经回答了如何获取日期距离。其余的,访问date
属性,应该很容易实现。
有关上述代码(组合)的现场演示,请参见:https ://ideone.com/e7DaOx
推荐阅读
- javascript - 如何使用 JS/React 检测没有外部库的移动设备或平板设备
- javascript - 具有多个变量的 ReactJS Radiobutton-Group
- xml - XmlElement.GetAttribute 不起作用
- xamarin.forms - span 中的绑定不起作用
- python - 无法导入烧瓶应用程序
- html - 用 opencpu 显示一个 visNetwork 对象
- git - 是否可以在另一个分支中将更改推送到主分支
- java-8 - Java 8 Stream collect:使用自定义 groupingBy 函数和 collectAndThen
- c++ - 使用 (cin) 用户输入将其粘贴到 std::system 并在另一个终端中使用输入运行命令
- matlab - 如何获取相机计算的参数?