$fields) { $this->ConvertModeltoUTC($model, $fields); } // tell the system we are now in UTC mode. FireflyConfig::set('utc', true); return Command::SUCCESS; } private function ConvertModeltoUTC(string $model, array $fields): void { /** @var string $field */ foreach ($fields as $field) { $this->convertFieldtoUTC($model, $field); } } private function convertFieldtoUTC(string $model, string $field): void { $this->info(sprintf('Converting %s.%s to UTC', $model, $field)); $shortModel = str_replace('FireflyIII\Models\\', '', $model); $timezoneField = sprintf('%s_tz', $field); $items = new Collection(); $timeZone = config('app.timezone'); try { $items = $model::where($timezoneField, $timeZone)->get(); } catch (QueryException $e) { $this->friendlyError(sprintf('Cannot find timezone information to field "%s" of model "%s". Field does not exist.', $field, $shortModel)); Log::error($e->getMessage()); } if (0 === $items->count()) { $this->friendlyPositive(sprintf('All timezone information is UTC in field "%s" of model "%s".', $field, $shortModel)); return; } $this->friendlyInfo(sprintf('Converting field "%s" of model "%s" to UTC.', $field, $shortModel)); $items->each( function ($item) use ($field, $timezoneField): void { /** @var Carbon $date */ $date = Carbon::parse($item->{$field}, $item->{$timezoneField}); $date->setTimezone('UTC'); $item->{$field} = $date->format('Y-m-d H:i:s'); $item->{$timezoneField} = 'UTC'; $item->save(); } ); } }