40 lines
		
	
	
		
			997 B
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			997 B
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace nur\b\date;
 | |
| 
 | |
| use nur\b\ValueException;
 | |
| 
 | |
| class Date extends Datetime {
 | |
|   const PATTERN = '/^(\d{2})\/(\d{2})\/(\d{4})$/';
 | |
|   const FORMAT = "d/m/Y";
 | |
| 
 | |
|   static function parse_date($date): int {
 | |
|     if ($date instanceof Datetime) {
 | |
|       $date = $date->getTime();
 | |
|     } elseif ($date === null || is_int($date)) {
 | |
|       if ($date === null) $date = time();
 | |
|     } elseif (is_array($date)) {
 | |
|       [$y, $m, $d] = $date;
 | |
|       $date = mktime(0, 0, 0, $m, $d, $y);
 | |
|     } elseif (is_string($date) && preg_match(self::PATTERN, $date, $ms)) {
 | |
|       $d = intval($ms[1]);
 | |
|       $m = intval($ms[2]);
 | |
|       $y = intval($ms[3]);
 | |
|       $date = mktime(0, 0, 0, $m, $d, $y);
 | |
|     } else {
 | |
|       throw ValueException::invalid_value($date, "date");
 | |
|     }
 | |
|     return $date;
 | |
|   }
 | |
| 
 | |
|   function __construct($date=null) {
 | |
|     parent::__construct(false);
 | |
|     if ($date !== false) {
 | |
|       $this->setTime(self::parse_date($date));
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   protected function afterUpdate(): void {
 | |
|     $this->wrapStart();
 | |
|   }
 | |
| }
 |