]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/Tiempo/Hora.php
4da62ff9e1946957f26de376c0dd8d319a12d7c3
[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($str)
40     {
41         $str = strval($str);
42         if (preg_match('/^\d+$/', $str)) {
43             if ($str < 24) {
44                 $str = sprintf('0:%02d:00:00', $str );
45             } elseif ($str == 24 or $str == 2400) {
46                 $str = '1:00:00:00';
47             } elseif ($str < 2400) {
48                 switch (strlen($str)) {
49                     case 2:
50                         $str = sprintf('0:%02d:%02d:00', $str{0}, $str{1});
51                         break;
52                     case 3:
53                         $str = sprintf('0:%02d:%02d:00', $str{0}, $str{1} . $str{2});
54                         break;
55                     case 4:
56                         $str = sprintf('0:%02d:%02d:00', $str{0} . $str{1}, $str{2} . $str{3});
57                         break;
58                 }
59             } else {
60                 return false;
61             }
62         } elseif (preg_match('/^(\d{0,2})\D(\d{1,2})$/', $str, $m)) {
63             if ($m[1] < 24 and $m[2] < 60) {
64                 $str = sprintf('0:%02d:%02d:00', $m[1], $m[2]);
65             } elseif ($m[1] == 24 and $m[2] == 0) {
66                 $str = '1:00:00:00';
67             } else {
68                 return false;
69             }
70         } elseif (preg_match('/^(\d{0,2})\D(\d{1,2})\D(\d{1,2})$/', $str, $m)) {
71             if ($m[1] < 24 and $m[2] < 60 and $m[3] < 60) {
72                 $str = sprintf('0:%02d:%02d:%02d', $m[1], $m[2], $m[3]);
73             } elseif ($m[1] == 24 and $m[2] == 0 and $m[3] == 0) {
74                 $str = '1:00:00:00';
75             } else {
76                 return false;
77             }
78         } else {
79             return false;
80         }
81         $this->setFromString($str, "%D:%H:%M:%S");
82         return true;
83     }
84
85     function get()
86     {
87         return $this->format("%E:%M");
88     }
89
90 }
91
92 ?>