javascript - 如何使用 momentjs 从数组中找到最接近当前时间的时间?

标签 javascript momentjs

我有一个值数组 [180, 360, 540, 720, 900, 1080, 1260]。每个数组项描述 UTC 午夜后的分钟数。

使用 momentjs ,如何找到最接近当前 'Europe/London' 时间的数组项?

到目前为止,我已经能够使用 moment-timezone.js 获取当前的'Europe/London' 时间| :

var currentTime = moment().tz('Europe/London');

但我现在正在努力寻找最接近 currentTime 的数组项。

最佳答案

如果可能的话,您应该保留 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>

然后第一个元素将是最近的,然后按距离顺序排列其余元素。

关于javascript - 如何使用 momentjs 从数组中找到最接近当前时间的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30194896/

相关文章:

javascript - JQuery/JavaScript 日历 slider

javascript - 为数组中的每个对象调用内部方法

javascript - 如何从另一个文件调用自执行函数

javascript - 如何使用 AngularJs 从表生成 JSON 来保存表格数据?

javascript - 将日期从带有偏移量的字符串转换为不同时区

angular - 在 Angular Material 8 中将 utc+0 与 MAT_DATE_LOCALE 结合使用

javascript - 如何在 JavaScript 中使用 momentjs 格式化日期

javascript - 获取点击像素内的元素?

javascript - 如何在不更改时间的情况下将日期时间与时区连接起来

javascript - 如何让 Moment.js 忽略用户的时区?