Как удалить некоторые записи или файлы после X раз - Laravel 5

Для строк, таких как 2012-09-19 01:27:30.000, DateTime.Parse не может определить, в какой часовом поясе указаны дата и время.

DateTime имеет свойство Kind , которое может имеют один из трех параметров часового пояса:

  • Unspecified
  • Локальный
  • Utc

ПРИМЕЧАНИЕ Если вы хотите представить дату / время, отличное от UTC или вашего местного часового пояса, вам следует использовать DateTimeOffset .


Итак, для код в вашем вопросе:

DateTime convertedDate = DateTime.Parse(dateStr);

var kind = convertedDate.Kind; // will equal DateTimeKind.Unspecified

Вы говорите, что знаете, что это такое, так скажите.

DateTime convertedDate = DateTime.SpecifyKind(
    DateTime.Parse(dateStr),
    DateTimeKind.Utc);

var kind = convertedDate.Kind; // will equal DateTimeKind.Utc

Теперь, как только система узнает его в UTC, вы можете просто называть ToLocalTime:

DateTime dt = convertedDate.ToLocalTime();

Это даст вам результат, который вам нужен.

0
задан Saif Manwill 16 January 2019 в 21:02
поделиться

2 ответа

Files::where('created_at', '<', Carbon::now()->subHours(2))->delete();

Убедитесь, что у вас установлен пакет Carbon

0
ответ дан Brad Goldsmith 16 January 2019 в 21:02
поделиться

Laravel справляется с этим довольно хорошо. Вы были правы, используйте планировщик заданий

. Я бы порекомендовал установить две разные работы, поскольку у вас есть два разных критерия (2 часа, 5 дней) для времени между задачи.

Для записей вы можете установить проверку в своей работе, чтобы увидеть, когда была создана запись, и удалить те, которые старше 2 часов. Примерно так:

$schedule->call(function () {
        DB::table('your_table')->whereRaw('created_at >= now() - interval 2 hour')
    })->daily();

Если вы используете Carbon, вы можете изменить запрос, используя что-то вроде:

->where('created_at', '>=', Carbon::now()->subMinutes(120)->toDateTimeString());

То же самое с удалением файла - создайте задание, которое удаляет эти файлы старше 5 дней. Это не сильно замедлит работу вашей системы, если вы настроите ее на выполнение, возможно, один раз в день в наименее популярные времена. Итак, при выполнении своей работы:

$schedule->job(new YourJob)->dailyAt('3:00');

Есть много способов сделать это. Но вам нужно узнать, как работает планировщик (легко), и тогда вы сможете использовать возможные решения здесь.

0
ответ дан Watercayman 16 January 2019 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: