假设我列出了在一周中的同一天和某个时间发生的重复事件,例如:周三下午5:30 - 7:30。显然,我不希望存储大量的日期字符串,展望未来。存储此数据的最佳方法是什么,以便我可以使用当前日期/时间对其进行测试。
我想基于今天是否发生事件来过滤存储为JSON的事件列表。为了更进一步,我想测试事件是否尚未开始,目前正在进行还是已完成。
以下是我正在使用的数据类型的示例:
"schedule": [
"wednesday": {
"open": "5:30",
"close": "7:30"
},
"thursday": {
"open": "5:30",
"close": "7:30"
},
"friday": {
"open": "5:30",
"close": "7:30"
},
"saturday": {
"open": "3:30",
"close": "4:30"
},
"sunday": {
"open": "2:30",
"close": "4:30"
}
]
我理解Date.getDay();
返回星期几的整数表示,所以也许我应该使用它而不是字符串表示。
当前架构需要从new Date
对象和每日时间表中获取小时和分钟,并将它们进行比较。必须有更好的方法。
答案 0 :(得分:2)
这是你正在寻找的测试它只是将关闭时间改为小于你当前的时间并观察输出关闭而不是打开:
<script type="text/javascript">
var d = new Date();
var weekday = new Array(7);
weekday[0]= "sunday";
weekday[1] = "monday";
weekday[2] = "tuesday";
weekday[3] = "wednesday";
weekday[4] = "thursday";
weekday[5] = "friday";
weekday[6] = "saturday";
var n = weekday[d.getDay()];
var schedule = {
"wednesday": {
"open": "5:30 AM",
"close": "7:30 PM"
},
"thursday": {
"open": "5:30 AM",
"close": "7:30 PM"
},
"friday": {
"open": "5:30 AM",
"close": "7:30 PM"
},
"saturday": {
"open": "3:30 AM",
"close": "4:30 PM"
},
"sunday": {
"open": "2:30 AM",
"close": "4:30 PM"
}
};
var dateString = "" + d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate();
var openDate = new Date(Date.parse((dateString + " " + schedule[n].open)));
var closeDate = new Date(Date.parse((dateString + " " + schedule[n].close)));
if((d >= openDate) && (d <= closeDate))
{
window.alert("Open");
}
else
{
window.alert("Closed");
}
</script>
这将创建3个日期对象1.当前日期和时间(d)2。今天的开放日期和时间(openDate)3。今天的关闭日期和时间(closeDate)。然后,它会将当前日期和时间与其他2个日期和时间进行比较,以确保它落在该范围内并输出“打开”。如果它不在范围内,它将输出“已关闭”。
更新:
将日期转换为UTC
window.alert("" + d.toUTCString());
答案 1 :(得分:1)
看到你想使用JSON进行过滤,看起来你有一个非常理想的格式。您可以使用以下命令返回当天的姓名:
var d = new Date();
var weekday = ["Sunday", "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
var n = weekday[d.getDay()];
最好让配置文件可读而不是易于编程。使用24小时的时间不必担心上午/下午的业务。
根据评论编辑:
var d = new Date();
var today = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0,0,0).getTime();
var time = d.getTime() - today; //today's time in miliseconds