На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Перебор всех дней в году на PHP


Закончил заказ, по сути ничего необычного, но вот именно то, что в заголовке – перебор дней – и заставило написать эту заметку.

Итак, необходимо было настроить прием данных онлайн с одного сервиса звонков (статистку) – установить вебхук, который принимает информацию, записывает в базу данных и отправляет на почту. Тут рассказывать нечего, задача стандартная: принимаем данные из $_POST, проверяем их, кодируем и отправляем в базу и на почту. Напоминаю, кстати, что необходимо провертять ip, откуда приходят данные.



Вторая задача тоже не самая уникальная – забрать данные за прошлые года по апи сервиса. Отправляем курлом гет запросы, ответ разбираем json и снова заносим в базу данных. Некоторую сложность добавляет то, что поля в вебхуках и апи могут не совпадать по названию и ответ в них тоже (например true - successful, false - unsuccessful), но это все решается чтением документации.

Дальше сложность идет в том, что объём большой и за один раз можно запросить информацию по тысяче звонков, а нам надо гораздо больше. Тут тоже все как обычно: делаем счетчик в базе данных и по крону вызываем (каждую минуту, например) наш скрипт скачивания данных. И вот тут я немного подзавис.

А как перебирать все звонки? Запрашиваем мы по дате, так что логично брать данные по одному дню – проходить по всем в году. Однако, тут сложность – формат даты такой “ДД/ММ/ГГГГ”. То есть нам надо узнавать число дней в году:

$days = 365 + date("L");
затем счетчик переводить в этот формат, а после прохождения года все повторять по новой. Вот перевод в формат и заставил немного подумать. Но затем пришла в голову другая мысль.

А что если сделать проще. Мы знаем, что число дней не может быть больше 31, месяцев – 12 и год окончания тоже знаем. Поэтому логично счетчик сделать не одинарный, а из трех чисел – и тогда проблема конвертирования формата даты пропадает. Получается в базе вот такая штука:



И очень простой код:

$result_dat = $conn->query("SELECT * FROM `import_call` WHERE `id` = '1'");
$row_dat = $result_dat->fetch_assoc();

$day = $row_dat['day'];
$month = $row_dat['month'];
$year = $row_dat['year'];
$dateFrom = $day."/".$month."/".$year;
/*
Тут отправляем запрос, получаем данные и заносим их в базу
*/

$day++;
if ($day > 31) {
$day = 1;
$month++;
if ($month > 12) {
$month = 1;
$year++;	
}	
}

$query2 = "UPDATE `import_call` SET `day` = '$day', `month` = '$month', `year` = '$year' WHERE `id` = '1'";	
mysqli_query($conn, $query2) or die (mysqli_error($conn));
Если в каком то месяце мы сделаем запрос на несуществующее количество дней – то просто обработать ошибку запроса. Вот и все - так просто можно обойти все дни в году. Если вам требуется решить такую или подобную задачу по забору данных или интеграции с различными сервисами – пишите мне – за разумные деньги решим ваш вопрос.



Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.



тегизаметки, решение задач, php

Читайте также:




7 оправданий шахматистов после проигрыша партии
Пошаговое руководство по верстке на вордпресс. Глава первая: создаем тему


© upread.ru 2013-2021
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.