Для строк, таких как 2012-09-19 01:27:30.000
, DateTime.Parse
не может определить, в какой часовом поясе указаны дата и время.
DateTime
имеет свойство Kind , которое может имеют один из трех параметров часового пояса:
ПРИМЕЧАНИЕ Если вы хотите представить дату / время, отличное от 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();
Это даст вам результат, который вам нужен.
Files::where('created_at', '<', Carbon::now()->subHours(2))->delete();
Убедитесь, что у вас установлен пакет Carbon
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');
Есть много способов сделать это. Но вам нужно узнать, как работает планировщик (легко), и тогда вы сможете использовать возможные решения здесь.