В php:
Код: Выделить всё
$dt = new \DateTime('2020-10-13');
$dt->getTimestamp(); // 1602536400
Yii::$app->formatter->asTimestamp($dt); // 1602536400
date("Y-m-d H:i:s", 1602536400); // 2020-10-13 00:00:00
В MySql:
UNIX_TIMESTAMP('2020-10-13') // 1602536400
FROM_UNIXTIME(1602536400) // 2020-10-13 00:00:00
Код: Выделить всё
public function rules()
{
[['date'], 'date', 'format' => 'php:d.m.Y', 'timestampAttribute' => 'date'],
}
Код: Выделить всё
// action
public function actionUpdate()
{
...
$model->load(Yii::$app->request->post());
var_dump($model->date); // "13.10.2020"
$model->validate(['date']);
var_dump($model->date); // 1602547200, что равно 2020-10-13 03:00:00 (+3 часа), должно быть 1602536400
}
Код: Выделить всё
\yii\validators\DateValidator
private function parseDateValuePHP($value, $format)
{
...
$hasTimeInfo = (strpbrk($format, 'HhGgisU') !== false);
$date = DateTime::createFromFormat($format, $value, new \DateTimeZone($hasTimeInfo ? $this->timeZone : 'UTC'));
...
}
Я В БД храню дату в unixtime, с фронта мне приходит только дата (для приложения это эквивалентно дата и 00:00:00 времени. Далее, когда я делаю выборки в отчетах я получаю не корректные результаты, т.к. в БД лежит не корректный timestamp, вместо 1602536400, там хранится 1602547200.
Выборка:
$q->andWhere(['>=', 'date', $dateTime->getTimestamp()]);
Если в контроллере я буду использовать значение с временем и исправлю формат даты в правилах валидации:
Код: Выделить всё
// rules:
[['date'], 'date', 'format' => 'php:d.m.Y H:i:s', 'timestampAttribute' => 'date']
Код: Выделить всё
// action:
$model->date .= " 00:00:00";
$model->validate(); // $model->date будет 1602536400