ФорумПрограммированиеPHP для идиотов → парсер даты

парсер даты

  • PHPLion

    Сообщения: 25 Репутация: N Группа: Кто попало

    Spritz 16 августа 2007 г. 23:46

    Друзья, посмотрите на код и скажите, что вы думаете…
    Задача
    Нужно отпарсить дату, выполнить какие-то операции с годом, месяцем, днем и вернуть дату с временем или без,
    если вместо даты подставляется что-то кроме даты, например строка с текстом, то нужно вывести эту строку

    CODE
    <?php
    $date = "2007-8-7 10:33";
    //$date = "Never";

    class jdn_persian {
    function gregorian_to_jalali($y, $m, $d) {
    $date = array($y-1, $m-1, $d-1);
    return $date;
    }
    };

    function parse_date($date) {
    if (strtotime($date)) {
    $dt = explode(" ", $date);
    $d = explode("-", $dt[0]);

    $obj = new jdn_persian;
    $adt = array("date" => $obj->gregorian_to_jalali($d[0], $d[1], $d[2]), "time" => $dt[1]);
    for ($i=1; $i<=2; $i++) {
    if ($adt['date'][$i] <= 9) {
    $adt['date'][$i] = "0".$adt['date'][$i];
    }
    }
    return $adt;

    } else {
    return $date;
    }
    }

    function show_date($date) {
    if (is_array($date = parse_date($date))) {
    return implode("-", $date['date'])." ".$date['time'];
    } else {
    return $date;
    }

    }

    echo show_date($date);
    ?>


    Спасибо, жду комментарии…
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 17 августа 2007 г. 0:51, спустя 1 час 5 минут 10 секунд

    class myDate{
    const DATE_PATT = '/^\d{4}-\d{1,2}-\d{1,2}( \d{1,2}:\d{1,2})?$/';

    const fmtDatA = 'm-d-Y';
    const fmtDatE = 'd-m-Y';
    //………продолжаем наскока надо

    function __construct($str){
    $this->text = trim($str);
    this->defDate();
    }

    public function showDate($format){
    if (!this->isDate){
    return htmlspesialchars($this->text);
    } else {
    return date($format, $this->date);
    }
    }

    private function defDate(){
    if (preg_match(self::DATE_PATT, $this->text)!=1) return;
    $this->isDate = true;
    $ar1 = explode(' ', $this->text);
    $arD = explode('-', $ar1[0]);
    if (count($ar1)==1) {
    $arT= array(0,0);
    } else {
    $arT = explode(':', $ar1[1]);
    }
    $this->date = mktime($arT[0], $arT[1], 0, $arD[1], $arD[0], $arD[2]);
    }

    private $date;
    private $text = '';
    private $isDate=false;
    }
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 17 августа 2007 г. 3:27, спустя 2 часа 35 минут 34 секунды

    ща vasa_c придет, ругаццо будет - скажет что все стат классом надо было делать - и нефиг плодить объекты :)

    это кстати основа - выдается либо текст, либо дата - видоизменить и доработать до разбора строки с датой в нужном формате и с лбюыми действиями над датой, впрочем, не сложно
  • PHPLion

    Сообщения: 25 Репутация: N Группа: Кто попало

    Spritz 17 августа 2007 г. 8:50, спустя 5 часов 23 минуты 16 секунд

    Спасибо огроМНОЕ.
    Но с mktime тут не получится в одном случае.
    Дата в бд хранитса в грегориане, а выводится в шамси(Иран), потом когда обратно ложитса в бд конвертитса из шамси в грегориан.
    Тут прийдетса строку формить и присваивать закрытому свойству dаte.
    П.С. 2007 в шамси это 1386<1970
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 17 августа 2007 г. 10:04, спустя 1 час 14 минут 4 секунды

    ща vasa_c придет, ругаццо будет

    он отъехал, можно дебоширить =)
    все умрут, а я изумруд
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 17 августа 2007 г. 12:30, спустя 2 часа 25 минут 54 секунды

    добавь свою ф-цию
    privat myMktime(){

    }
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 17 августа 2007 г. 12:42, спустя 11 минут 30 секунд

    он отъехал, можно дебоширить =)

    дык дня через 4 вернется то..

Пожалуйста, авторизуйтесь, чтобы написать комментарий!