如何使用 momentjs 从数组中找到最接近当前时间的时间?
How to find the closest time to the current time from an array using momentjs?
我有一组值 [180, 360, 540, 720, 900, 1080, 1260]
。每个数组项描述 UTC 午夜后的分钟数。
使用momentjs,如何找到最接近当前'Europe/London'
时间的数组项?
到目前为止,我已经能够使用 moment-timezone.js:
获取当前的 'Europe/London'
时间
var currentTime = moment().tz('Europe/London');
但我现在正在努力寻找最接近 currentTime
的数组项。
试试这个
var x= [180, 360, 540, 720, 900, 1080, 1260]
closestTime=500
var newar=[]
for(i=0;i<x.length;i++){
newar.push(Math.abs(closestTime-x[i]))
}
var i = newar.indexOf(Math.min.apply(Math, newar));
console.log(x[i])
如果可能的话,您应该保留 UTC 格式的值,直到您准备好格式化。时区和日期格式通常是本地化的一部分,而不是您希望在业务逻辑中嵌入得太深的东西。请注意,有些时区改变了他们当地的时间流向,这对每个人来说都是一场噩梦。
使用 UTC 格式的传入数据和比较数据,您可以简单地按绝对差对数组进行排序:
var now = moment.utc();
var target = now.hours() * 60 + now.minutes();
var data = [180, 360, 540, 720, 900, 1080, 1260]
var sorted = data.sort(function(a, b) {
var dA = Math.abs(a - target),
dB = Math.abs(b - target);
if (dA < dB) {
return -1;
} else if (dA > dB) {
return 1;
} else {
return 0;
}
});
document.getElementById('r').textContent = JSON.stringify(sorted);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.2/moment.min.js"></script>
<pre id="r"></pre>
第一个元素将是最近的,然后按距离顺序排列其余元素。
我有一组值 [180, 360, 540, 720, 900, 1080, 1260]
。每个数组项描述 UTC 午夜后的分钟数。
使用momentjs,如何找到最接近当前'Europe/London'
时间的数组项?
到目前为止,我已经能够使用 moment-timezone.js:
获取当前的'Europe/London'
时间
var currentTime = moment().tz('Europe/London');
但我现在正在努力寻找最接近 currentTime
的数组项。
试试这个
var x= [180, 360, 540, 720, 900, 1080, 1260]
closestTime=500
var newar=[]
for(i=0;i<x.length;i++){
newar.push(Math.abs(closestTime-x[i]))
}
var i = newar.indexOf(Math.min.apply(Math, newar));
console.log(x[i])
如果可能的话,您应该保留 UTC 格式的值,直到您准备好格式化。时区和日期格式通常是本地化的一部分,而不是您希望在业务逻辑中嵌入得太深的东西。请注意,有些时区改变了他们当地的时间流向,这对每个人来说都是一场噩梦。
使用 UTC 格式的传入数据和比较数据,您可以简单地按绝对差对数组进行排序:
var now = moment.utc();
var target = now.hours() * 60 + now.minutes();
var data = [180, 360, 540, 720, 900, 1080, 1260]
var sorted = data.sort(function(a, b) {
var dA = Math.abs(a - target),
dB = Math.abs(b - target);
if (dA < dB) {
return -1;
} else if (dA > dB) {
return 1;
} else {
return 0;
}
});
document.getElementById('r').textContent = JSON.stringify(sorted);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.2/moment.min.js"></script>
<pre id="r"></pre>
第一个元素将是最近的,然后按距离顺序排列其余元素。