简体   繁体   English

如何从时间范围获取当前程序

[英]How to get current program from time ranges

Let's say that i have a JSON file like this 假设我有一个像这样的JSON文件

[
    {
        "programId": "bla-bla-1",
        "programTitle": "bla bla 1",
        "programImg": "bla1.jpg",
        "startsAt": "Apr 05 2017 11:00:00 GMT+0200 (EET)",
        "endsAt": "Apr 05 2017 12:00:00 GMT+0200 (EET)"
    },
    {
        "programId": "bla-bla-2",
        "programTitle": "bla bla 2",
        "programImg": "bla2.jpg",
        "startsAt": "Apr 05 2017 12:00:00 GMT+0200 (EET)",
        "endsAt": "Apr 05 2017 14:00:00 GMT+0200 (EET)"
    },
    {
        "programId": "bla-bla-3",
        "programTitle": "bla bla 3",
        "programImg": "bla3.jpg",
        "startsAt": "Apr 05 2017 14:00:00 GMT+0200 (EET)",
        "endsAt": "Apr 05 2017 16:00:00 GMT+0200 (EET)"
    }
]

And current time is (Apr 05 2017 12:30:00 GMT+0200 (EET)) how can i get the current program from those time ranges using Javascript also i can use library like momentJS 当前时间是(Apr 05 2017 12:30:00 GMT + 0200(EET))我如何使用Javascript从那些时间范围中获取当前程序,我也可以使用诸如momentJS之类的库

You can do something like this: 您可以执行以下操作:

 var obj = [ { "programId": "bla-bla-1", "programTitle": "bla bla 1", "programImg": "bla1.jpg", "startsAt": "Apr 05 2017 11:00:00 GMT+0200 (EET)", "endsAt": "Apr 05 2017 12:00:00 GMT+0200 (EET)" }, { "programId": "bla-bla-2", "programTitle": "bla bla 2", "programImg": "bla2.jpg", "startsAt": "Apr 05 2017 12:00:00 GMT+0200 (EET)", "endsAt": "Apr 05 2017 14:00:00 GMT+0200 (EET)" }, {"programId": "bla-bla-3", "programTitle": "bla bla 3", "programImg": "bla3.jpg", "startsAt": "Apr 05 2017 14:00:00 GMT+0200 (EET)", "endsAt": "Apr 05 2017 16:00:00 GMT+0200 (EET)"}]; var now = new Date("Apr 05 2017 12:30:00 GMT+0200 (EET)").getTime();//new Date().getTime(); var prog = obj.find(o => { return (now >= new Date(o.startsAt).getTime() && now <= new Date(o.endsAt).getTime()); }); console.log(prog); 

Note that the solution given by Tisus may not work on every browser since date parsing of non-standard string is system-dependent. 请注意,由于非标准字符串的日期解析与系统有关,因此Tisus提供的解决方案可能无法在所有浏览器上使用。

I suggest to parse your input using moment(String, String) instead of new Date(String) . 我建议使用moment(String, String)而不是new Date(String)解析您的输入。 Then you can use moment isBetween to check if the current day is in the given range. 然后,您可以使用moment isBetween来检查当前日期是否在给定范围内。

Here a live sample: 这是一个现场样本:

 var input = [ { "programId": "bla-bla-1", "programTitle": "bla bla 1", "programImg": "bla1.jpg", "startsAt": "Apr 05 2017 11:00:00 GMT+0200 (EET)", "endsAt": "Apr 05 2017 12:00:00 GMT+0200 (EET)" }, { "programId": "bla-bla-2", "programTitle": "bla bla 2", "programImg": "bla2.jpg", "startsAt": "Apr 05 2017 12:00:00 GMT+0200 (EET)", "endsAt": "Apr 05 2017 14:00:00 GMT+0200 (EET)" }, { "programId": "bla-bla-3", "programTitle": "bla bla 3", "programImg": "bla3.jpg", "startsAt": "Apr 05 2017 14:00:00 GMT+0200 (EET)", "endsAt": "Apr 05 2017 16:00:00 GMT+0200 (EET)" } ] var prog = input.find(item => { //var now = moment(); // mocking current time in order to get always the same result var now = moment("Apr 05 2017 12:30:00 GMT+0200 (EET)", 'MMM DD YYYY HH:mm:ss Z') var start = moment(item.startsAt, 'MMM DD YYYY HH:mm:ss Z'); var end = moment(item.endsAt, 'MMM DD YYYY HH:mm:ss Z'); return now.isBetween(start, end); }); console.log(prog); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script> 


As side note: I agree with Rajesh, providing code attempt would help getting better answers and gives you the chance to learn better. 旁注:我同意Rajesh的观点,提供代码尝试将有助于获得更好的答案,并为您提供学习的机会。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM