Рубрики
Uncategorized

Пример операций увеличения и уменьшения времени и даты PHP [реализация даты strtotime плюс один день, плюс один месяц и т.д.)

Автор оригинала: David Wong.

В этой статье приведен пример операции приращения и вычитания времени и даты PHP. Поделитесь для вашей справки следующим образом:

Функция времени-это ежедневная функция в PHP, период времени по умолчанию, сегодня, вчера, завтра, на прошлой неделе, на следующей неделе, время начала и окончания этой недели, время начала этого месяца, время окончания прошлого месяца, понедельник и воскресенье указанной даты и т.д.

Date_default_timezone_set('PRC'); //default time zone
// The current time is increased by five days
$date1 = "2018-12-21";
Echo date ('Y-m-d', strtotime ("$date1 + 5 days");// Output: 2018-12-26
// Accordingly, to increase the number of months and years, change day to month or year.
//+ ++ Today, Yesterday, Tomorrow, Last Week and Next Week
Echo: "Today:", "date ("Y-m-d","time ()","hr >";
Echo: "Yesterday:", "date" ("Y-m-d", "strtotime" ("-1 day"), "hr>";
Echo: "Tomorrow:", "date" ("Y-m-d", "strtotime" ("+1 day"), "hr>";
Echo: "one week later:", "date ("Y-m-d","strtotime ("+1 week"),"< HR >";
Echo: "one week, two days, four hours and two seconds", "date" ("Y-m-d G: H: s", "strtotime" ("+1 week, 2 days, 4 hours, 2 seconds"), "hr >";
Echo: "Next Thursday:", date ("Y-m-d"), strtotime ("next Thursday"), and "
"; Echo: "Last Monday:". date ("Y-m-d", strtotime ("last Monday"). "
"; Echo: "a month ago:". date ("Y-m-d", strtotime ("last month"). "
"; Echo: "one month later:". date ("Y-m-d", strtotime ("+1 month"). "
"; Echo: "ten years later:". date ("Y-m-d", strtotime ("+10 years"). "
";

Результаты операции:

2018-12-26 Сегодня: 2018-12-21 ————————— Вчера: 2018-12-20 ————————— Завтра: 2018-12-22 ————————— Неделю спустя: 2018-12-28 ————————— Одна неделя, два дня, четыре часа и две секунды спустя: 2018-12-30 15:15:46 ——————————————————————————– В следующий четверг: 2018-12-27 ————————— В прошлый понедельник: 2018-12-17 ————————— Месяц назад: 2018-11-21 ————————— Месяц спустя: 2019-01-21 ——————————————————————————– Десять лет спустя: 2028-12-21 ——————————————————————————–

PHP время начала и время окончания недели; время начала и время окончания месяца; время начала и время окончания последнего месяца

Date_default_timezone_set('PRC'); //default time zone
/**
* Function: Get the start and end dates of the week for a given date
* Parameter: $gdate date, default to that day, format: YYYY-MM-DD
* First week starts on Monday or Sunday, 0 on Sunday and 1 on Monday.
* Return: array ("start date", "end date");
*
*/
function aweek($gdate = "", $first = 0){
  if(!$gdate) $gdate = date("Y-m-d");
  W = date ("w", strtotime ($gdate); // Get the day of the week, starting on Sunday 0-6
  $dn = $w? $w - $first: 6; // days to be subtracted
  // Starting date of the week
  $st = date("Y-m-d", strtotime("$gdate -".$dn." days"));
  // End date of the week
  $en = date("Y-m-d", strtotime("$st +6 days"));
  // Beginning date of last week
  $last_st = date('Y-m-d',strtotime("$st - 7 days"));
  // Last week's closing date
  $last_en = date('Y-m-d',strtotime("$st - 1 days"));
  Return array ($st, $en, $last_st, $last_en); // return start and end dates
}
echo implode("|", aweek("", 1)).'
'; //echo date("Y-m-d",strtotime("time()")); Echo'The first day of the week (Sunday is the beginning of the week):'. date ('Y-m-d', time () - 86400 * date ('w').'< HR >'; Echo'The first day of the week (Monday is a week):'. date ('Y-m-d', time () - 86400 * date ('w') + (date ('w') > 0? 86400: - 6 * 86400).'< HR >'; Echo's first day of the month:'.date ('Y-m-d', mktime (0, 0, 0, date ('m'), 1, date ('Y')'.'< HR >'; Echo's last day of the month:'.date ('Y-m-d', mktime (0, 0, 0, date ('m'), date ('t'), date ('Y').'< HR >'; // Beginning date of last month $m = date('Y-m-d', mktime(0,0,0,date('m')-1,1,date('Y'))); // How many days were there last month? $t = date('t',strtotime("$m")); Echo's first day of last month:'.date ('Y-m-d', mktime (0, 0, 0, date ('m') - 1, 1, date ('Y').'< HR >'; Echo'last day of last month:'.date ('Y-m-d', mktime (0, 0, 0, date ('m') - 1, $t, date ('Y').'< HR >';

Результаты операции:

2018-12-17|2018-12-23|2018-12-10|2018-12-16 Первый день недели (воскресенье-неделя): 2018-12-16 ——————————————————————————– Первый день недели (понедельник-это неделя): 2018-12-17 ————————— День 1 этого месяца: 2018-12-01 ————————— Последний день месяца: 2018-12-31 ————————— Первый день прошлого месяца: 2018-11-01 ————————— Последний день прошлого месяца: 2018-11-30 ——————————————————————————–

// There is a method in the PHP manual that returns Monday and Sunday of the specified date.
function get_week_range($week, $year){
  $timestamp = mktime(1,0,0,1,1,$year);
  $firstday = date("N",$timestamp);
  if($firstday >4){
    $firstweek = strtotime('+'.(8-$firstday).' days', $timestamp);
  }else{
    $firstweek = strtotime('-'.($firstday-1).' days', $timestamp);
  }
  $monday = strtotime('+'.($week - 1).' week', $firstweek);
  $sunday = strtotime('+6 days', $monday);
  $start = date("Y-m-d", $monday);
  $end = date("Y-m-d", $sunday);
  return array($start, $end);
}
// strtotime gets the BUG of the method for the first and last day of the week
// There is a method in the PHP manual that returns Monday and Sunday of the specified date.
function get_week_range2($week, $year){
  $timestamp = mktime(1,0,0,1,1,$year);
  $firstday = date("N",$timestamp);
  if($firstday >4){
    $firstweek = strtotime('+'.(8-$firstday).' days', $timestamp);
  }else{
    $firstweek = strtotime('-'.($firstday-1).' days', $timestamp);
  }
  $monday = strtotime('+'.($week - 1).' week', $firstweek);
  $sunday = strtotime('+6 days', $monday);
  $start = date("Y-m-d", $monday);
  $end = date("Y-m-d", $sunday);
  return array($start, $end);
}

Но в новом году с его использованием возникнут проблемы.

Например, в субботу, 31 декабря 2011 года, и в воскресенье, 1 января 2012 года, понедельник и воскресенье совершенно разные.

Понедельник и воскресенье, 31 декабря 2011 г. 2011-12-26 2012-01-01

Но понедельник и воскресенье 1 января 2012 года соответствуют друг другу.

2012-01-02 2012-01-04

Причина в том, что неделя введенного метода составляет 53 недели, но год-2011, поэтому мы считаем, что 53 недели 2011 года, поэтому расчет неверен, решение таково:

Если неделя больше 10 (потому что в январе месяце не может быть 10 недель), а когда месяц равен 1, год будет уменьшен на 1.

if(date('m',$last_week_time) == '01' and $tmp_last_week > 10){
  $last_week_year--;
}

PS: Вот некоторые инструменты, связанные с временем и датой, для вашей справки.

Онлайн Калькулятор Дат/Дат: http://tools.jb51.net/jisuanqi/date_jisuanqi

Онлайн Калькулятор Дат/Калькулятор Дат с разницей: http://tools.jb51.net/jisuanqi/datecalc

Онлайн Калькулятор Разницы Дат: http://tools.jb51.net/jisuanqi/onlinedatejsq

Инструмент преобразования меток времени Unix: http://tools.jb51.net/code/unixtime

Больше читателей, интересующихся контентом, связанным с PHP, могут ознакомиться с темами этого сайта: Краткое описание использования даты и времени Php, Полные навыки работы с массивами PHP, Введение в базовую грамматику PHP, Краткое описание работы с PHP и использования операторов, Введение в объектно-ориентированное программирование Php, Краткое описание использования строк Php, Руководство по работе с базой данных php +mysql и Краткое описание общих навыков работы с базами данных в PHP

Я надеюсь, что эта статья будет полезна для разработки PHP – программ для всех.