]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/Tiempo/Hora.php
Nuevo menu vertical para marco (redisenio de Vero)
[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 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 ?>