За последние 24 часа нас посетили 22587 программистов и 1128 роботов. Сейчас ищет 661 программист ...

Получить timestamp начала и конца текущего года

Тема в разделе "PHP для новичков", создана пользователем marlin, 24 авг 2020.

  1. marlin

    marlin Новичок

    С нами с:
    19 июн 2019
    Сообщения:
    61
    Симпатии:
    3
    Мне нужно вести сквозную нумерацию в течении года, но в БД записи timestamp-ми помечены, а не значением года.
    Средствами функций mysql не хотел бы решать.
    Думаю в запрос добавить ограничение на диапазон timestamp-ов.
    Кое что погуглил, но дополнительные расширения ставить не хочется, другое не понравилось, вот свое набросал:
    Код (Text):
    1. function getRange($year) {
    2.     return [
    3.         'start' => mktime(0, 0, 1, 1, 1, $year),
    4.         'end' => mktime(0, 0, -1, 1, 1, $year+1)
    5.     ];
    6. }
    7. $range = getRange(2020);
    8. echo date('Y-m-d H:i:s', $range['start']);
    9. echo '<br>';
    10. echo date('Y-m-d H:i:s', $range['end']);
    Вроде нормально работает?
    Для 2020 выдает:
    2020-01-01 00:00:01
    2020-12-31 23:59:59

    Думаете есть недостатки?
     
  2. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    А в чем сложность?
     
  3. marlin

    marlin Новичок

    С нами с:
    19 июн 2019
    Сообщения:
    61
    Симпатии:
    3
    Ну если это будет выражение типа YEAR(FROM_UNIXTIME(`created_at`)) == '2020'
    Это же full scan всей таблицы будет, если не ошибаюсь.

    Оно мне надо?
     
  4. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Так. Приведите-ка пример вашего "timestamp" содержащегося в таблице.
    А также структуру соответствующей колонки.
     
  5. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Код (Text):
    1. SELECT *
    2. FROM `tablename`
    3. WHERE YEAR(`created_at`) = 2020
    4. ORDER BY `created_at` ASC
     
  6. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    Так-то:
    Код (SQL):
    1. SELECT unix_timestamp('2020-01-01'), unix_timestamp('2020-12-31 23:59:59');
     
  7. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    Ещё можно использовать возможности LAST_INSERT_ID() для формирования последовательности (нумерации)
    Например, в табличке одна строка может содержать timestamp начала периода, timestamp конца периода и порядковый номер документа.
    При переходе на новый период - добавляем строку для очередного периода.