Php месяц назад от текущей даты

Содержание
  1. How to get previous month and year relative to today, using strtotime and date?
  2. Операции с датами и временем Unixtime в PHP
  3. Получение временных меток и дат
  4. Число дня недели
  5. Числа месяца
  6. Текущий месяц:
  7. Преведущий месяц:
  8. Следующий месяц:
  9. Число дней в текущем месяце
  10. Порядковый номер недели
  11. Число дней в текущем году
  12. Текущий квартал
  13. Арифметические операции
  14. Прибавить к дате 10 секунд
  15. Прибавить к дате 10 минут
  16. Прибавить к дате 1 час
  17. Прибавить к дате 1 день
  18. Прибавить к дате неделю
  19. Прибавить к дате месяц
  20. Прибавить к дате год
  21. Сколько прошло
  22. Сколько прошло c 8:00
  23. Сколько прошло c понедельника этой недели
  24. Сколько прошло c начала года
  25. Сколько прошло c определённой даты
  26. Сколько остается
  27. Сколько остается до 23:00
  28. Сколько остается до конца недели
  29. Сколько остается до конца месяца
  30. Сколько остается до конца года
  31. Сколько остается до определенной даты
  32. Время между датами
  33. Количество часов между датами
  34. Количество дней между датами
  35. Количество месяцев между датами
  36. Комментарии 2
  37. Другие публикации
  38. PHP subtract 1 month from date formatted with date (‘m-Y’)

How to get previous month and year relative to today, using strtotime and date?

This behavior is understandable (to a certain point), due to different number of days in february and march, and code in example above is what I need, but works only 100% correctly for between 1st and 28th of each month. So, how to get last month AND year (think of date(«Y-m») ) in the most elegant manner as possible, which works for every day of the year? Optimal solution will be based on strtotime argument parsing. Update. To clarify requirements a bit. I have a piece of code that gets some statistics of last couple of months, but I first show stats from last month, and then load other months when needed. That’s intended purpose. So, during THIS month, I want to find out which month-year should I pull in order to load PREVIOUS month stats. I also have a code that is timezone-aware (not really important right now), and that accepts strtotime -compatible string as input (to initialize internal date), and then allows date/time to be adjusted, also using strtotime -compatible strings. I know it can be done with few conditionals and basic math, but that’s really messy, compared to this, for example (if it worked correctly, of course):

echo tz::date('last month')->format('Y-d') 

So, I ONLY need previous month and year, in a strtotime -compatible fashion. Answer (thanks, @dnagirl):

// Today is 2011-03-30 echo date('Y-m-d', strtotime('first day of last month')); // Output: 2011-02-01 

Источник

Читайте также:  Color texts in html

Операции с датами и временем Unixtime в PHP

Unix-время (англ. Unix time, также POSIX-время) — система описания моментов во времени. Определяется как количество секунд, прошедших с полуночи 1 января 1970 года.

В PHP текущую метку времени возвращает функция time() и функция strtotime(), также с unix-метками работает класс DateTime.

Получение временных меток и дат

Число дня недели

// Понедельник текущей недели: $time = strtotime('this week monday, 00:00'); echo date('d.m.Y H:i', $time); // 24.07.2023 00:00 // Понедельник предыдущий недели: $time = strtotime('previous week monday, 00:00'); echo date('d.m.Y H:i', $time); // 17.07.2023 00:00 // Понедельник следующей недели: $time = strtotime('next monday, 00:00'); echo date('d.m.Y H:i', $time); // 31.07.2023 00:00

Числа месяца

Текущий месяц:

// Первый день текущего месяца: $time = strtotime('first day of this month 00:00'); echo date('d.m.Y H:i:s', $time); // 01.07.2023 00:00:00 // Последний день текущего месяца: $time = strtotime('last day of this month 23:59'); echo date('d.m.Y H:i:s', $time); // 31.07.2023 23:59:00

Преведущий месяц:

// Первый день предыдущего месяца: $time = strtotime('first day of previous month 00:00'); echo date('d.m.Y H:i:s', $time); // 01.06.2023 00:00:00 // Последний день предыдущего месяца: $time = strtotime('last day of previous month 23:59'); echo date('d.m.Y H:i:s', $time); // 30.06.2023 23:59:00

Следующий месяц:

// Первый день следующего месяца: $time = strtotime('first day of next month 00:00'); echo date('d.m.Y H:i:s', $time); // 01.08.2023 00:00:00 // Последний день следующего месяца: $time = strtotime('last day of next month 23:59'); echo date('d.m.Y H:i:s', $time); // 31.08.2023 23:59:00

Число дней в текущем месяце

Порядковый номер недели

Число дней в текущем году

echo date('L') ? 366 : 365; // 365

Текущий квартал

echo intval((date('n') + 2) / 3); // 3

Арифметические операции

Для сложения и вычитания времени можно применить функцию strtotime() или просто работать с секундами:

Читайте также:  Non atomic operations in java
1 минута 60 секунд 10 минут 600 секунд
1 час 3600 секунд 10 часов 36000 секунд
1 день 86400 секунд 2 дня 172800 секунд
1 неделя 604800 секунд 2 недели 1209600 секунд
1 месяц 2629743 секунд 2 месяца 5259486 секунд
1 год 31556926 секунд 2 года 63072000 секунд

Прибавить к дате 10 секунд

$time = time() + 10; echo date('d.m.Y H:i:s', $time); // 26.07.2023 17:33:31 /* или */ $time = strtotime('+10 seconds', time()); echo date('d.m.Y H:i:s', $time); // 26.07.2023 17:33:31

Прибавить к дате 10 минут

$time = time() + 600; echo date('d.m.Y H:i:s', $time); // 26.07.2023 17:43:21 /* или */ $time = strtotime('+10 minutes', time()); echo date('d.m.Y H:i:s', $time); // 26.07.2023 17:43:21

Прибавить к дате 1 час

$time = time() + 3600; echo date('d.m.Y H:i:s', $time); // 26.07.2023 18:33:21 /* или */ $time = strtotime('+1 hours', time()); echo date('d.m.Y H:i:s', $time); // 26.07.2023 18:33:21

Прибавить к дате 1 день

$time = time() + 86400; echo date('d.m.Y H:i:s', $time); // 27.07.2023 17:33:21 /* или */ $time = strtotime('+1 days', time()); echo date('d.m.Y H:i:s', $time); // 27.07.2023 17:33:21

Прибавить к дате неделю

$time = strtotime('+1 week', time()); echo date('d.m.Y H:i:s', $time); // 02.08.2023 17:33:21

Прибавить к дате месяц

$time = strtotime('+1 month', time()); echo date('d.m.Y H:i:s', $time); // 26.08.2023 17:33:21

Прибавить к дате год

$time = strtotime('+1 year', time()); echo date('d.m.Y H:i:s', $time); // 26.07.2024 17:33:21

Сколько прошло

Сколько прошло c 8:00

$date = date('d.m.Y 08:00'); $diff = time() - strtotime($date); echo round($diff / 3600, 1); // 9,6 часов

Сколько прошло c понедельника этой недели

$time = strtotime('monday'); $diff = time() - $time; echo round($diff / 3600); // 66 часов echo round($diff / 86400, 1); // 2,7 дней

*Дни недели: monday, tuesday, wednesday, thursday, friday, saturday, sunday.

Сколько прошло c начала года

$date = date('01.01.Y 00:00:00'); $diff = time() - strtotime($date); echo intval($diff / 86400); // 206 дней // или echo date('z'); // 206

Сколько прошло c определённой даты

$date = '10.08.2016'; $diff = time() - strtotime($date); echo round($diff / 3600); // 61002 часов echo round($diff / 86400); // 2542 дней

Сколько остается

Сколько остается до 23:00

$time = strtotime(date('d.m.Y 23:00')); $diff = $time - time(); echo round($diff / 3600, 1); // 5,4 часов

Сколько остается до конца недели

$date = strtotime('next sunday, 23:59'); $diff = $date - time(); echo round($diff / 3600); // 102 часов echo round($diff / 86400); // 4 дней

*Дни недели: monday, tuesday, wednesday, thursday, friday, saturday, sunday.

Читайте также:  Java lang exception invoke failed

Сколько остается до конца месяца

$time = strtotime(date('Y-m-t 23:59')); $diff = $time - time(); echo round($diff / 3600); // 126 часов echo round($diff / 86400); // 5 дней

Сколько остается до конца года

$time = strtotime(date('Y-12-31 23:59')); $diff = $time - time(); echo round($diff / 3600); // 3798 часов echo round($diff / 86400); // 158 дней

Сколько остается до определенной даты

$date = '10.08.2025'; $diff = strtotime($date) - time(); echo round($diff / 3600); // 17886 часов echo round($diff / 86400); // 745 дней

Время между датами

Количество часов между датами

$date_1 = '01.01.2021 10:00'; $date_2 = '10.03.2021 18:00'; $seconds = abs(strtotime($date_1) - strtotime($date_2)); echo round($seconds / 3600); // 1640

Количество дней между датами

$date_1 = '01.01.2021 10:00'; $date_2 = '10.03.2021 18:00'; $seconds = abs(strtotime($date_1) - strtotime($date_2)); echo round($seconds / 86400, 1); // 68,3

Количество месяцев между датами

$date_1 = strtotime('01.01.2021 10:00'); $date_2 = strtotime('10.03.2021 18:00'); $months = 0; while (strtotime('+1 month', $date_1) < $date_2) < $months++; $date_1 = strtotime('+1 month', $date_1); >$days = round(($date_2 - $date_1) / (60 * 60 * 24)); echo $months . ' месяца, ' . $days . ' дней'; // 2 месяца, 9 дней

Комментарии 2

Специально не поленился и авторизовался, чтобы выразить благодарность авторам сайта, молодцы ребята! Неоднократно на вашем сайте получал именно нужную инфу, у вас все примеры разжеваны, с разными вариантами, не то что где нибудь найдешь вроде то, что тебе нужно и потом полдня думаешь, как под свою задачу это допилить. В данном случае мне нужно было кол-во дней между датами, при чем число должно быть дробным — то есть 3.6 дня, например. У вас нашел, скопировал, и вставил (только имена переменных поменял), все. Именно то, что нужно. И так бывало уже не раз. В общем, спасибо, и обязательно продолжайте в том же духе!

Авторизуйтесь, чтобы добавить комментарий.

Другие публикации

Как настроить Last-Modified

Заголовок Last-Modified помогает оптимизировать загрузку web-страниц и облегчить работу поисковым роботам.

Источник

PHP subtract 1 month from date formatted with date (‘m-Y’)

as @FakhruddinUjjainwala pointed out I found a solution preventing this with a second strtotime(). Just look at my provided anwser.

echo date(‘Y-m’, strtotime(‘2021-07-31’ . ‘ — 1 month’)); check this this will return 2021-07.. similarly check for March 31st or March 30th and even March 29th too if not leap year

Warning! The above-mentioned examples won’t work if call them at the end of a month.

The following example will produce the same result:

$date = new DateTime('2017-10-31 00:00:00'); echo $date->format('m-Y')."\n"; $date->modify('-1 month'); echo $date->format('m-Y')."\n"; 

Plenty of ways how to solve the issue can be found in another thread: PHP DateTime::modify adding and subtracting months

The reason behind it does not work is because the following: What’s last month of 2017-10-29 ? 2017-09-29 . And last month of 2017-10-30 ? 2017-09-30 . And what about last month of 2017-10-31 ? In theory 2017-09-31 , but this day does not exist, and then it maps onto 2017-10-01 .

$today = date('m-Y'); $newdate = date('m-Y', strtotime('-1 months', strtotime($today))); echo $newdate; 

should have included that this is looping around as I want to get the last 12 months starting from the current month.

Depending on your PHP version you can use DateTime object (introduced in PHP 5.2 if I remember correctly):

You can pass another date to the constructor, it does not have to be the current date. More information: http://php.net/manual/en/datetime.modify.php

$lastMonth = date('Y-m', strtotime('-1 MONTH')); 

While this code may answer the question, providing additional context regarding how and/or why it solves the problem would improve the answer’s long-term value.

$effectiveDate = date('2018-01'); 
echo 'Date'.$effectiveDate;
$effectiveDate = date('m-y', strtotime($effectiveDate.'+-1 months'));
echo 'Date'.$effectiveDate;

I used this to prevent the «last days of month»-error. I just use a second strtotime() to set the date to the first day of the month:

First change the date format m-Y to Y-m

 $date = $_POST('date'); // Post month or $date = date('m-Y'); // currrent month $date_txt = date_create_from_format('m-Y', $date); $change_format = date_format($date_txt, 'Y-m'); 

This code minus 1 month to the given date

 $final_date = new DateTime($change_format); $final_date->modify('-1 month'); $output = $final_date->format('m-Y'); 
$currentMonth = date('m', time()); $currentDay = date('d',time()); $currentYear = date('Y',time()); $lastMonth = $currentMonth -1; $one_month_ago=mkdate(0,0,0,$one_month_ago,$currentDay,$currentYear); 

This could be rewritten more elegantly, but it works for me

I realize this is an old post, but I’ve been solving the same issue, and here is what I came up with to account for all the variability. This function is just trying to get relative dates, so same day of prior month, or last day of month if you are on the last day, regardless of exactly how many days a month has. So goal is given ‘2010-03-31’ and subtract a month, we should output ‘2010-02-28’.

private function subtractRelativeMonth(DateTime $incomingDate): DateTime < $year = $incomingDate->format('Y'); $month = $incomingDate->format('m'); $day = $incomingDate->format('d'); $daysInOldMonth = cal_days_in_month(CAL_GREGORIAN, $month, $year); if ($month == 1) < //It's January, so we have to go back to December of prior year $month = 12; $year--; >else < $month--; >$daysInNewMonth = cal_days_in_month(CAL_GREGORIAN, $month, $year); if ($day > $daysInNewMonth && $month == 2) < //New month is Feb $day = $daysInNewMonth; >if ($day > 29 && $daysInOldMonth > $daysInNewMonth) < $day = $daysInNewMonth; >$adjustedDate = new \DateTime($year . '-' . $month . '-' . $day); return $adjustedDate; > 

Источник

Оцените статью