javascript - 在 MomentJS 中确定午夜后的营业时间

标签 javascript momentjs

我正在使用 MomentJS在我的应用程序中确定商家当前是否营业。

我按以下格式存储时间:

{ open_time: "Thu Jan 01 1970 08:00:00 GMT-0500 (Eastern Standard Time)" },
{ close_time: "Thu Jan 01 1970 23:00:00 GMT-0500 (Eastern Standard Time)" }

在我的代码中:

let openTime = moment(weekday.open_time).format('HH:MM'); // 08:00
let closeTime = moment(weekday.close_time).format('HH:MM'); // 23:00
let currentTime = moment(new Date()).format('HH:MM'); // 20:00

// Determine if business is currently open
let isOpenNow = currentTime >= openTime && currentTime < closeTime ? true : false

除非企业的打烊时间午夜或更晚的时间,否则这会正常工作,例如:

open_time: 08:00 
close_time: 02:00 // The next day

有没有一种简单的方法可以立即解决这个问题(或者一些简单的 jane javascript 逻辑)?

最佳答案

如果您对日期不感兴趣,则将打开和关闭时间存储为时间,而不是日期。然后将打开和关闭时间转换为方便的格式并与其他时间(可能是当前时间)进行比较。例如

var times = [{cafe: 'Sally\'s',
              open_time:'08:00', // 8am - 11pm same day
              close_time: '23:00'},
             {cafe: 'Fred\'s',
              open_time:'20:00', // 8pm - 6am next day
              close_time: '06:00'}];


function isOpen(date, times) {
  // Helper to convert HH:mm to milliseconds
  function toMS(s) {
    s = s.split(':');
    return s[0]*3.6e6 + s[1]*6e4;
  }
  // Copy date so don't affect original
  var d = new Date(+date);
  // Get time since midnight for date
  var t = date - d.setHours(0,0,0,0);
  return t >= toMS(times.open_time) &&
         t <= toMS(times.close_time);
}

// Test
var now = new Date().toLocaleString(undefined,{hour12:true,hour:'numeric',minute:'2-digit'})
times.forEach(function(obj){
  console.log(`It's ${now} and ${obj.cafe} is ${isOpen(new Date(), obj)? 'open':'closed'}.`);
})

关于javascript - 在 MomentJS 中确定午夜后的营业时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49142893/

相关文章:

javascript - 在单页中加载两个 requireJs 应用程序

JavaScript Moment.js 试图获得 2 个日期时间之间的差异

javascript - 如何构建在非全局区域设置中工作的 'moment' 函数?

javascript - 使用 _.some | _.any 正确表示破折号或下划线

javascript - moment JS - 比较本地时间的正确方法

javascript - 了解 momentjs 中 + 运算符的类型转换

javascript - 限制 AngularJS 中的 ng-repeat 迭代

javascript - 不支持的伪 : in-viewport

javascript - 纯 javascript FormData 上传文件和数据在 PHP 端失败

javascript - prevProps.search.query 始终与 this.props.search.query 相同