2017-10-19 6 views
1

Censé être, j'ai l'heure de début et de fin.Comment puis-je afficher les heures entre le début et la fin

Compte tenu Exemple:

var startTime = '12:30 PM'; 
var endTime = '03:00 AM'; 

Maintenant, je veux afficher le temps entre cette plage avec 5 minutes d'intervalle, 3 heures de temps supplémentaire de startTime et moins 1 heure pour la fin de cycle. Ainsi, le résultat de l'échantillon en fonction de l'intervalle de temps donné sera:

03:30 PM 
03:35 PM 
03:40 PM 
03:45 PM 
03:50 PM 
03:55 PM 
04:00 PM 
04:05 PM 
.... 
.... 
02:00 AM 

première fois à afficher sera 03:30 PM parce 12:30 PM + 3 hours = 03:30 PM

Et la dernière fois pour afficher sera 02:00 AM parce 03:00 AM - 1 hour = 02:00 AM

Je m en utilisant moment.js. Voici mon code:

var startTime = '12:30 PM'; 
var endTime = '03:00 AM'; 

var startTime2 = '12:30 PM'; 
var endTime2 = '05:00 PM'; 

console.log(intervals(startTime, endTime));  // this is not working 
console.log(intervals(startTime2, endTime2)); // this is working 

function intervals(start, end) { 
    var start = moment(start, 'hh:mm a').add(3, 'h'); 
    var end = moment(end, 'hh:mm a').subtract(1, 'h'); 

    var result = []; 
    var current = moment(start); 
    while (current <= end) { 
    result.push(current.format('hh:mm a')); 
    current.add(5, 'minutes'); 
    } 
    return result; 
} 

Mon problème est que, si l'heure

var startTime = '12:30 PM'; 
var endTime = '03:00 AM'; 

ne fonctionnera pas. Cela ne fonctionne que si le temps donné sera

var startTime2 = '12:30 PM'; 
var endTime2 = '05:00 PM'; 

Je pense que le problème est dû aux périodes PM-AM. Comment pouvons-nous résoudre cela? S'il vous plaît aider.

+0

Pouvez-vous s'il vous plaît poster un extrait de code de ce travail exactement isnt? – void

+0

problème est que votre première heure de fin besoin d'avoir 1 jour supplémentaire :) de sorte que vous devez ajouter un jour à votre fin var locale si la fin est inférieure à commencer. – boly38

+0

Que faire si startTime est '05:00 PM' et endTime est' 04:00 PM'. Pouvez-vous simplement faire l'hypothèse que si le temps de fin est plus petit que le début, alors c'est le jour suivant? – void

Répondre

1

Juste ont cette une condition aussi bien:

if(end < start) 
    end = end.add(1, 'd'); 

Vérifiez le code complet ci-dessous:

var startTime = '12:30 PM'; 
 
var endTime = '03:00 AM'; 
 

 
var startTime2 = '12:30 PM'; 
 
var endTime2 = '05:00 PM'; 
 

 
console.log(intervals(startTime, endTime));  // this is not working 
 
console.log(intervals(startTime2, endTime2)); // this is working 
 

 
function intervals(start, end) { 
 
    var start = moment(start, 'hh:mm a').add(3, 'h'); 
 
    var end = moment(end, 'hh:mm a').subtract(1, 'h'); 
 
    if(end < start) 
 
    end = end.add(1, 'd'); 
 
    var result = []; 
 
    var current = moment(start); 
 
    while (current <= end) { 
 
    result.push(current.format('hh:mm a')); 
 
    current.add(5, 'minutes'); 
 
    } 
 
    return result; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.1/moment.js"></script>

+0

Très bien! c'est tout. Je vous remercie. ça marche. Continuez à partager :) – JSmith