]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/Tiempo/Hora.php
Bugfixes.
[mecon/meconlib.git] / lib / MECON / Tiempo / Hora.php
1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
3                              Ministerio de Economía
4                                     meconlib
5 -------------------------------------------------------------------------------
6 This file is part of meconlib.
7  
8 meconlib is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2 of the License, or (at your option)
11 any later version.
12  
13 meconlib is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16  
17 You should have received a copy of the GNU General Public License; if not,
18 write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
19 Boston, MA  02111-1307  USA
20 -------------------------------------------------------------------------------
21 Creado: lun abr 22 16:05:33 ART 2002
22 Autor:  Gonzalo Merayo <gmeray@mecon.gov.ar>
23 -------------------------------------------------------------------------------
24 $Id$
25 -----------------------------------------------------------------------------*/
26
27 require_once 'Date/Span.php';
28
29 /**
30  * Representa una hora.
31  *
32  * @package HE
33  * @abstract
34  * @version $Rev$
35  * @author  Gonzalo Merayo <gmeray@mecon.gov.ar>
36  */
37 class MECON_Tiempo_Hora extends Date_Span {
38
39     function set
40         ($str) {
41         $str = strval($str);
42         if (preg_match('/^\d+$/', $str)) {
43             if ($str < 24) {
44                 $str = sprintf('0:%02d:00:00', $str );
45             }
46             elseif ($str == 24 or $str == 2400) {
47                 $str = '1:00:00:00';
48             }
49             elseif ($str < 2400) {
50                 switch (strlen($str)) {
51                 case 2:
52                         $str = sprintf('0:%02d:%02d:00', $str{0}, $str{1});
53                     break;
54                 case 3:
55                     $str = sprintf('0:%02d:%02d:00', $str{0}, $str{1} . $str{2});
56                     break;
57                 case 4:
58                     $str = sprintf('0:%02d:%02d:00', $str{0} . $str{1}, $str{2} . $str{3});
59                     break;
60                 }
61             }
62             else {
63                 return false;
64             }
65         }
66         elseif (preg_match('/^(\d{0,2})\D(\d{1,2})$/', $str, $m)) {
67             if ($m[1] < 24 and $m[2] < 60) {
68                 $str = sprintf('0:%02d:%02d:00', $m[1], $m[2]);
69             }
70             elseif ($m[1] == 24 and $m[2] == 0) {
71                 $str = '1:00:00:00';
72             }
73             else {
74                 return false;
75             }
76         }
77         elseif (preg_match('/^(\d{0,2})\D(\d{1,2})\D(\d{1,2})$/', $str, $m)) {
78             if ($m[1] < 24 and $m[2] < 60 and $m[3] < 60) {
79                 $str = sprintf('0:%02d:%02d:%02d', $m[1], $m[2], $m[3]);
80             }
81             elseif ($m[1] == 24 and $m[2] == 0 and $m[3] == 0) {
82                 $str = '1:00:00:00';
83             }
84             else {
85                 return false;
86             }
87         }
88         else {
89             return false;
90         }
91         $this->setFromString($str, "%D:%H:%M:%S");
92         return true;
93     }
94
95     function get
96         () {
97         return $this->format("%E:%M");
98     }
99
100 }
101
102 ?>