Hannes Weninger: JavaScript Array - Überlappen sich die Zeiten

Hallo.

ich habe folgende JavaScript Funktion unten um zu checken, ob sich 2 Zeiten (start - end) überlappen. Das Funtioniert gut. Mein Problem ist jetzt, dass ich z.B: 6 Zeiten (start - end) haben kann und ich alles checken möchte, ob sich irgendein Intervall mit einem anderen überlappt.

Weiß jemand, wie ich das am besten lösen kann. Ich müsste ja z.B. meine 6 Zeiten in 2er Arrays aufsplitten, und da jede Kombination. Weiß da jemand eie bessere Lösung?

Danke! Hannes

function overlapping(a, b) {
    function getMinutes(s) {
        var p = s.split(':').map(Number);
        return p[0] * 60 + p[1];
    }
    return getMinutes(a.end) > getMinutes(b.start) && getMinutes(b.end) > getMinutes(a.start);
}

document.write(overlapping({ start: '00:00', end: '00:00' }, { start: '00:00', end: '00:00' }) + '<br>');
document.write(overlapping({ start: '00:00', end: '02:00' }, { start: '00:00', end: '02:00' }) + '<br>');

  1. Hallo Hannes Weninger,

    Weiß jemand, wie ich das am besten lösen kann. Ich müsste ja z.B. meine 6 Zeiten in 2er Arrays aufsplitten, und da jede Kombination. Weiß da jemand eie bessere Lösung?

    Zunächst:

    Ist 4-6 1-2 7-8 eine gültige Angabe?

    Bis demnächst
    Matthias

    --
    Wenn eine Idee nicht zuerst absurd erscheint, taugt sie nichts. (Albert Einstein)
    1. Ist 4-6 1-2 7-8 eine gültige Angabe?

      Ja, ist gültig, da sich keine Zeit überschneidet

      1. Hallo Hannes Weninger,

        • Zuerst die drei Intervalle in die richtige Reihenfolge bringen.
        • Alle Zeiten in Timestamps umrechnen (Array A)
        • Array A sortieren -> Array B
        • Wenn die Arrays A und B gleich sind, überlappen sich die Zeiten nicht.

        Bis demnächst
        Matthias

        --
        Wenn eine Idee nicht zuerst absurd erscheint, taugt sie nichts. (Albert Einstein)
  2. Hallo,

    Inwiefern ist das jetzt ein anderes Problem, als deins von vor fünf Tagen?

    Edit: eigentlich wollte ich das inzwischen vom Martin verlinkte Posting raussuchen.

    Gruß
    Kalk

    1. Naja. der Sachverhalt ist doch etwas anderes. Beim anderen Post vor 5 Tagen hatte ich 2 Daten zu vergleichen. Hier möchte ich schaun, ob sich Intervalle überlappen.

      1. Hallo,

        Naja. der Sachverhalt ist doch etwas anderes.

        Aber nicht so anders, dass man da jetzt in kurzer Zeit (mind.) drei Threads für benötigt.

        Gruß
        Kalk

  3. Mahlzeit,

    ich habe folgende JavaScript Funktion unten um zu checken, ob sich 2 Zeiten (start - end) überlappen. Das Funtioniert gut. Mein Problem ist jetzt, dass ich z.B: 6 Zeiten (start - end) haben kann und ich alles checken möchte, ob sich irgendein Intervall mit einem anderen überlappt.

    diese Problemstellung hast du erst neulich schon einmal beschrieben.

    Weiß jemand, wie ich das am besten lösen kann. Ich müsste ja z.B. meine 6 Zeiten in 2er Arrays aufsplitten, und da jede Kombination.

    Nein, nicht jede.

    Weiß da jemand eie bessere Lösung?

    Was hat dir an meinem Lösungsansatz damals nicht gefallen?

    So long,
     Martin

    --
    Bei der Umsetzung von guten Ideen hapert es meist viel mehr an der Wolle als an der Könne.
    1. Was hat dir an meinem Lösungsansatz damals nicht gefallen?

      Nichts, ich bin schlichtweg gescheitert und habs dann mit der oberen Methode versucht.

  4. Tach,

    Weiß jemand, wie ich das am besten lösen kann. Ich müsste ja z.B. meine 6 Zeiten in 2er Arrays aufsplitten, und da jede Kombination. Weiß da jemand eie bessere Lösung?

    je nachdem wie viel du mit Zeiten rechnen möchtest, könnnte es sich lohnen Moment.js zu nutzen und deine Zeiträume mit dem Plugin Moment-Range zu checken: https://github.com/gf3/moment-range#contains--within--overlaps--intersect--add--subtract

    mfg
    Woodfighter

    1. Tach,

      Moment-Range

      und jetzt habe ich die Lizenz gesehen; um das in Deutschland zu benutzen, müsste man, die Autoren erst um eine andere Lizenz bitten (CC0 wäre etwas mit dem selben Ziel), die Unlicense ist hier vermutlich nicht rechtssicher.

      mfg
      Woodfighter