Tools\Utility\Time::parseLocalizedDate PHP Method

parseLocalizedDate() public static method

.. - i18n: Today, Yesterday, Tomorrow
public static parseLocalizedDate ( string $date, string | null $format = null, string $type = 'start' ) : string
$date string to parse
$format string | null Format to parse (null = auto)
$type string - start: first second of this interval - end: last second of this interval
return string timestamp
    public static function parseLocalizedDate($date, $format = null, $type = 'start')
    {
        $date = trim($date);
        $i18n = [strtolower(__d('tools', 'Today')) => ['start' => date(FORMAT_DB_DATETIME, mktime(0, 0, 0, date('m'), date('d'), date('Y'))), 'end' => date(FORMAT_DB_DATETIME, mktime(23, 59, 59, date('m'), date('d'), date('Y')))], strtolower(__d('tools', 'Tomorrow')) => ['start' => date(FORMAT_DB_DATETIME, mktime(0, 0, 0, date('m'), date('d'), date('Y')) + DAY), 'end' => date(FORMAT_DB_DATETIME, mktime(23, 59, 59, date('m'), date('d'), date('Y')) + DAY)], strtolower(__d('tools', 'Yesterday')) => ['start' => date(FORMAT_DB_DATETIME, mktime(0, 0, 0, date('m'), date('d'), date('Y')) - DAY), 'end' => date(FORMAT_DB_DATETIME, mktime(23, 59, 59, date('m'), date('d'), date('Y')) - DAY)], strtolower(__d('tools', 'The day after tomorrow')) => ['start' => date(FORMAT_DB_DATETIME, mktime(0, 0, 0, date('m'), date('d'), date('Y')) + 2 * DAY), 'end' => date(FORMAT_DB_DATETIME, mktime(23, 59, 59, date('m'), date('d'), date('Y')) + 2 * DAY)], strtolower(__d('tools', 'The day before yesterday')) => ['start' => date(FORMAT_DB_DATETIME, mktime(0, 0, 0, date('m'), date('d'), date('Y')) - 2 * DAY), 'end' => date(FORMAT_DB_DATETIME, mktime(23, 59, 59, date('m'), date('d'), date('Y')) - 2 * DAY)]];
        if (isset($i18n[strtolower($date)])) {
            return $i18n[strtolower($date)][$type];
        }
        if ($format) {
            $res = DateTime::createFromFormat($format, $date);
            $res = $res->format(FORMAT_DB_DATE) . ' ' . ($type === 'end' ? '23:59:59' : '00:00:00');
            return $res;
        }
        if (strpos($date, '.') !== false) {
            $explode = explode('.', $date, 3);
            $explode = array_reverse($explode);
        } elseif (strpos($date, '/') !== false) {
            $explode = explode('/', $date, 3);
            $explode = array_reverse($explode);
        } elseif (strpos($date, '-') !== false) {
            $explode = explode('-', $date, 3);
        } else {
            $explode = [$date];
        }
        if ($explode) {
            $count = count($explode);
            for ($i = 0; $i < $count; $i++) {
                $explode[$i] = static::pad($explode[$i]);
            }
            $explode[0] = static::pad($explode[0], 4, '20');
            if (count($explode) === 3) {
                return implode('-', $explode) . ' ' . ($type === 'end' ? '23:59:59' : '00:00:00');
            }
            if (count($explode) === 2) {
                return implode('-', $explode) . '-' . ($type === 'end' ? static::daysInMonth($explode[0], $explode[1]) : '01') . ' ' . ($type === 'end' ? '23:59:59' : '00:00:00');
            }
            return $explode[0] . '-' . ($type === 'end' ? '12' : '01') . '-' . ($type === 'end' ? '31' : '01') . ' ' . ($type === 'end' ? '23:59:59' : '00:00:00');
        }
        return '';
    }

Usage Example

コード例 #1
0
ファイル: TimeTest.php プロジェクト: alescx/cakephp-tools
 /**
  * TimeTest::testParseLocalizedDate()
  *
  * @return void
  */
 public function testParseLocalizedDate()
 {
     $ret = $this->Time->parseLocalizedDate('15-Feb-2009', 'j-M-Y', 'start');
     //$this->debug($ret);
     $this->assertEquals('2009-02-15 00:00:00', $ret);
     // problem when not passing months or days as well - no way of knowing how exact the date was
     $ret = $this->Time->parseLocalizedDate('2009', 'Y', 'start');
     //pr($ret);
     //$this->assertEquals($ret, '2009-01-01 00:00:00');
     $ret = $this->Time->parseLocalizedDate('Feb 2009', 'M Y', 'start');
     //pr($ret);
     //$this->assertEquals($ret, '2009-02-01 00:00:00');
     $values = [[__d('tools', 'Today'), [date(FORMAT_DB_DATETIME, mktime(0, 0, 0, date('m'), date('d'), date('Y'))), date(FORMAT_DB_DATETIME, mktime(23, 59, 59, date('m'), date('d'), date('Y')))]], ['2010', ['2010-01-01 00:00:00', '2010-12-31 23:59:59']], ['23.02.2011', ['2011-02-23 00:00:00', '2011-02-23 23:59:59']], ['22/02/2011', ['2011-02-22 00:00:00', '2011-02-22 23:59:59']], ['3/2/11', ['2011-02-03 00:00:00', '2011-02-03 23:59:59']]];
     foreach ($values as $v) {
         $ret = $this->Time->parseLocalizedDate($v[0], null, 'start');
         //pr($ret);
         $this->assertEquals($v[1][0], $ret);
         $ret = $this->Time->parseLocalizedDate($v[0], null, 'end');
         //pr($ret);
         $this->assertEquals($v[1][1], $ret);
     }
 }