* fin es anterior a la de inicio.
*
*/
- function MECON_Tiempo_Intervalo( $inicio = null, $fin = null, $chequear = true ) {
- if (is_null($inicio))
+ function MECON_Tiempo_Intervalo($inicio = null, $fin = null, $chequear = true)
+ {
+ if (!$inicio) {
$inicio = new MECON_Tiempo_Hora;
- if (is_null($fin))
+ }
+ if (!$fin) {
$fin = new MECON_Tiempo_Hora;
- if(!is_a($inicio, 'mecon_tiempo_hora'))
- return false;
- if(!is_a($fin, 'mecon_tiempo_hora'))
- return false;
+ }
$this->inicio = $inicio;
$this->fin = $fin;
if ($chequear) {
}
}
- function _chequear() {
+ function _chequear()
+ {
$a = $this->fin;
if($a->lower($this->inicio)) {
$tmp = $this->fin;
}
}
- function invertido() {
+ function invertido()
+ {
return $this->fin->lower($this->inicio);
}
- function setInicio( $inicio ) {
- if(! is_a($inicio, 'mecon_tiempo_hora'))
- return false;
+ function setInicio($inicio) {
$this->inicio = $inicio;
$this->_chequear();
}
* @param var $fin
*
*/
- function setFin( $fin ) {
- if(! is_a($fin,'mecon_tiempo_hora'))
- return false;
+ function setFin($fin)
+ {
$this->fin = $fin;
$this->_chequear();
}
- function getDuracion() {
+ function getDuracion()
+ {
$c = new MECON_Tiempo_Hora;
$c->copy($this->fin);
$c->subtract($this->inicio);
return $c;
}
- // XXX - Amplié el método para comparar con varios intervalos a la vez,
- // si el argumento no es un array, anda de todas maneras.
- function seSuperpone( $intervalos ) {
- if (!is_array($intervalos))
+ /**
+ * Chequea si el intervalo se superpone con otros.
+ * @param $intervalos Intervalo o array de Intervalo con los cuales chequear.
+ * @return true si se superpone con uno o más intervalos.
+ */
+ function seSuperpone($intervalos)
+ {
+ if (!is_array($intervalos)) {
$intervalos = array($intervalos);
+ }
foreach ($intervalos as $i) {
- if (is_a($i, 'mecon_tiempo_intervalo')) {
- if ($i->fin->greaterEqual($this->inicio) &&
- $this->fin->greaterEqual($i->inicio))
- return true;
- if ($this->fin->greaterEqual($i->inicio) &&
- $i->fin->greaterEqual($this->inicio))
- return true;
+ if ($i->fin->greater($this->inicio) && $this->fin->greater($i->inicio)) {
+ return true;
+ }
+ if ($this->fin->greater($i->inicio) && $i->fin->greater($this->inicio)) {
+ return true;
}
}
return false;
}
- function fusionar( $f ) {
- if(! is_a($f, 'mecon_tiempo_intervalo'))
- return false;
- if(! $this->seSuperpone( $f ))
+ /**
+ * Chequea si el intervalo es adyacente a otro.
+ * Ejemplo:
+ * <pre>
+ * A B
+ * |-----------|------------| Adyacentes
+ *
+ * A B
+ * |-----------| |--------| No adyacentes
+ * </pre>
+ * @param $intervalo Intervalo con el cual chequear.
+ * @return true si se son adyacentes.
+ */
+ function esAdyacente($intervalo)
+ {
+ if ($intervalo->fin->equal($this->inicio) || $this->fin->equal($intervalo->inicio)) {
+ return true;
+ }
+ return false;
+ }
+
+ function fusionar($i)
+ {
+ if (!$this->seSuperpone($i) && !$this->esAdyacente($i)) {
return false;
- if($f->fin->greater($this->fin))
- $this->fin = $f->fin;
- if($f->inicio->lower($this->inicio))
- $this->inicio = $f->inicio;
+ }
+ if ($i->fin->greater($this->fin)) {
+ $this->fin = $i->fin;
+ }
+ if ($i->inicio->lower($this->inicio)) {
+ $this->inicio = $i->inicio;
+ }
return true;
}
- function superponer( $i ) {
- if(! is_a($i, 'mecon_tiempo_intervalo'))
- return false;
+ function superponer($i)
+ {
$inicio = $this->inicio;
$fin = $this->fin;
- if($this->inicio->lower($i->inicio))
+ if ($this->inicio->lower($i->inicio)) {
$inicio = $i->inicio;
- if($this->fin->greater( $i->fin ))
+ }
+ if ($this->fin->greater($i->fin)) {
$fin = $i->fin;
+ }
$fin->subtract($inicio);
return $fin;
}
*
* @return object Intervalo Intervalo anterior al punto de corte.
*/
- function cortar($c) {
+ function cortar($c)
+ {
if(is_a($c, 'mecon_tiempo_hora')) {
return $this->cortarHora($c);
- }
- elseif (is_a($c, 'mecon_tiempo_intervalo')) {
+ } elseif (is_a($c, 'mecon_tiempo_intervalo')) {
return $this->cortarIntervalo($c);
- }
- else {
+ } else {
return false;
}
}
*
* @return object Intervalo Intervalo anterior a la hora de corte.
*/
- function cortarHora($h) {
- if (!is_a($h, 'mecon_tiempo_hora'))
- return false;
+ function cortarHora($h)
+ {
$class = get_class($this);
$r = new $class;
$r->copy($this);
*
* @return object Intervalo Intervalo anterior al intervalo de corte.
*/
- function cortarIntervalo($i) {
- if (!is_a($i, 'mecon_tiempo_intervalo'))
- return false;
+ function cortarIntervalo($i)
+ {
$ant = $this->cortarHora($i->inicio);
$this->cortarHora($i->fin);
return $ant;
return 'inicio: ' . $this->inicio->format() . ' | fin: ' . $this->fin->format();
}
- function copy($int = null) {
- if (!(is_a($int, 'mecon_tiempo_intervalo')))
- return false;
- $this->inicio = new MECON_Tiempo_Hora($int->inicio->get
- ());
- $this->fin = new MECON_Tiempo_Hora($int->fin->get
- ());
+ function copy($i)
+ {
+ $this->inicio = $i->inicio->__clone();
+ $this->fin = $i->fin->__clone();
return true;
}
- function __clone() {
+ function __clone()
+ {
$class = get_class($this);
$i = new $class;
- $i->inicio = $this->inicio->__clone();
- $i->fin = $this->fin->__clone();
+ $i->copy($this);
return $i;
}