Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP, странно работает DateTime::format / 5 сообщений из 5, страница 1 из 1
12.03.2015, 12:00
    #38902232
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP, странно работает DateTime::format
Использую такой код:
Код: php
1.
$clock = $class->dateString(null, 'Y-m-d');


dateString это метод:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
        public function dateString($clock=null, $format=null)
        {
                if (isset($clock) && is_object($clock) && is_a($clock, 'DateTime'))
                {
                        $dt = $clock;
                }
                else
                {
                        $dt = $this->dateLocal($clock);
var_dump($dt);
                }
var_dump($format);
                if (!isset($format)) $format = 'Y-m-d H:i:s';
                return $dt->format($format);
        }



Получаю такой вывод:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
object(DateTime)#6 (3) {
  ["date"]=>
  string(26) "2015-03-12 11:59:45.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(13) "Europe/Moscow"
}
string(5) "Y-m-d"
PHP Fatal error:  Call to a member function format() on a non-object in ...

Если в вызове я укажу dateString(null, 'Y-m-d H:i:s') или dateString(), тогда все выполняется без ошибок.

Почему метод format не работает? Ведь $dt это объект DateTime.

________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
12.03.2015, 12:05
    #38902244
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP, странно работает DateTime::format
Такой костыль работает:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
        public function dateString($clock=null, $format=null)
        {
                if (isset($clock) && is_object($clock) && is_a($clock, 'DateTime'))
                {
                        $dt = $clock;
                }
                else
                {
                        $dt = $this->dateLocal($clock);
                }
                if (!isset($format)) $format = 'Y-m-d H:i:s';
                $ts = $dt->format('U');
                return date($format, $ts);
        }



Но непонятно, почему не работает собственный метод.
В результатах date_get_last_errors никаких ошибок нет.
...
Рейтинг: 0 / 0
12.03.2015, 13:30
    #38902382
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP, странно работает DateTime::format
Alibek B.,

код $this->dateLocal() в студию
...
Рейтинг: 0 / 0
12.03.2015, 14:33
    #38902494
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP, странно работает DateTime::format
Так ведь $dt является объектом DateTime, видно же в дампе.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
        public function dateLocal($clock=null, $remotetz=false)
        {
                $tz = new DateTimeZone($this->tz);
                if (isset($clock))
                {
                        if (is_object($clock) && is_a($clock, 'DateTime'))
                        {
                                $dt = $clock;
                                $dt->setTimezone($tz);
                        }
                        else
                        {
                                $fmt = 'Y-m-d\TH:i:s';
                                $dt = DateTime::createFromFormat($fmt, $clock, $tz);
                        }
                }
                else
                {
                        $dt = new DateTime(null, $tz);
                }
                if ($remotetz) $dt->setTimezone(new DateTimezone(date_default_timezone_get()));
                return $dt;
        }
...
Рейтинг: 0 / 0
12.03.2015, 15:14
    #38902555
-k2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP, странно работает DateTime::format
Alibek B.,
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
class MyClass {
	protected $tz = "Europe/Moscow";	
	function __construct(){
	}	 
public function dateString($clock=null, $format=null)
        {
                if (isset($clock) && is_object($clock) && is_a($clock, 'DateTime'))
                {
                        $dt = $clock;
                }
                else
                {
                        $dt = $this->dateLocal($clock);
var_dump($dt);
                }
var_dump($format);
                if (!isset($format)) $format = 'Y-m-d H:i:s';
                return $dt->format($format);
        }

        public function dateLocal($clock=null, $remotetz=false)
        {
                $tz = new DateTimeZone($this->tz);
                if (isset($clock))
                {
                        if (is_object($clock) && is_a($clock, 'DateTime'))
                        {
                                $dt = $clock;
                                $dt->setTimezone($tz);
                        }
                        else
                        {
                                $fmt = 'Y-m-d\TH:i:s';
                                $dt = DateTime::createFromFormat($fmt, $clock, $tz);
                        }
                }
                else
                {
                        $dt = new DateTime(null, $tz);
                }
                if ($remotetz) $dt->setTimezone(new DateTimezone(date_default_timezone_get()));
                return $dt;
        }
}
$inst = new MyClass();
$clock = $inst->dateString(null, 'Y-m-d');
var_dump("clock=" .$clock); 
//object(DateTime)#33 (3) { ["date"]=> string(19) "2015-03-12 16:13:05" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Moscow" } string(5) "Y-m-d" string(16) "clock=2015-03-12"


все вроде в порядке
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP, странно работает DateTime::format / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]