note 102899 modified in function.date by danbrown
| From: | danbrown@php.net | Date: | Sun, 13 Mar 2011 17:44:59 +0000 |
| Subject: | note 102899 modified in function.date by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-177845@lists.php.net to get a copy of this message | ||
Function for get date interval in Russian format
<?php
function getDateDiff($firstDate, $secondDate) {
$firstTimeStamp = strtotime($firstDate);
$secondTimeStamp = strtotime($secondDate);
$base_day = date('j', $secondTimeStamp);
$base_mon = date('n', $secondTimeStamp);
$base_yr = date('Y', $secondTimeStamp);
$current_day = date ('j', $firstTimeStamp);
$current_mon = date ("n", $firstTimeStamp);
$current_yr = date ("Y", $firstTimeStamp);
// and now .... calculate the difference! :-)
// overflow is always caused by max days of $base_mon
// so we need to know how many days $base_mon had
$base_mon_max = date ("t",mktime (0,0,0,$base_mon,$base_day,$base_yr));
// days left till the end of that month
$base_day_diff = $base_mon_max - $base_day;
// month left till end of that year
// substract one to handle overflow correctly
$base_mon_diff = 12 - $base_mon - 1;
// start on jan 1st of the next year
$start_day = 1;
$start_mon = 1;
$start_yr = $base_yr + 1;
// difference to that 1st of jan
$day_diff = ($current_day - $start_day) + 1; // add today
$mon_diff = ($current_mon - $start_mon) + 1; // add current month
$yr_diff = ($current_yr - $start_yr);
// and add the rest of $base_yr
$day_diff = $day_diff + $base_day_diff;
$mon_diff = $mon_diff + $base_mon_diff;
// handle overflow of days
if ($day_diff >= $base_mon_max) {
$day_diff = $day_diff - $base_mon_max;
$mon_diff = $mon_diff + 1;
}
// handle overflow of years
if ($mon_diff >= 12) {
$mon_diff = $mon_diff - 12;
$yr_diff = $yr_diff + 1;
}
$result = '';
if ($yr_diff > 0) {
if ($yr_diff >= 5 && $yr_diff <= 20) {
$yearLabel = 'леÑ';
}
elseif ($yr_diff % 10 == 1) {
$yearLabel = 'год';
}
elseif ($yr_diff % 10 <= 4) {
$yearLabel = 'года';
}
else {
$yearLabel = 'леÑ';
}
$result .= $yr_diff . ' ' . $yearLabel . ' ';
}
if ($mon_diff > 0) {
if ($mon_diff == 1) {
$monthLabel = 'меÑÑÑ';
}
elseif ($mon_diff <= 4) {
$monthLabel = 'меÑÑÑа';
}
else {
$monthLabel = 'меÑÑÑев';
}
$result .= $mon_diff . ' ' . $monthLabel . ' ';
}
if ($day_diff > 0) {
if ($day_diff >= 5 && $day_diff <= 20) {
$dayLabel = 'дней';
}
elseif ($day_diff % 10 == 1) {
$dayLabel = 'денÑ';
}
elseif ($day_diff % 10 <= 4) {
$dayLabel = 'днÑ';
}
else {
$dayLabel = 'дней';
}
$result .= $day_diff . ' ' . $dayLabel . ' ';
}
return array($yr_diff, $mon_diff, $day_diff);
}
?>
--was--
Function for get date interval in Russian format
function getDateDiff($firstDate, $secondDate) {
$firstTimeStamp = strtotime($firstDate);
$secondTimeStamp = strtotime($secondDate);
$base_day = date('j', $secondTimeStamp);
$base_mon = date('n', $secondTimeStamp);
$base_yr = date('Y', $secondTimeStamp);
$current_day = date ('j', $firstTimeStamp);
$current_mon = date ("n", $firstTimeStamp);
$current_yr = date ("Y", $firstTimeStamp);
// and now .... calculate the difference! :-)
// overflow is always caused by max days of $base_mon
// so we need to know how many days $base_mon had
$base_mon_max = date ("t",mktime (0,0,0,$base_mon,$base_day,$base_yr));
// days left till the end of that month
$base_day_diff = $base_mon_max - $base_day;
// month left till end of that year
// substract one to handle overflow correctly
$base_mon_diff = 12 - $base_mon - 1;
// start on jan 1st of the next year
$start_day = 1;
$start_mon = 1;
$start_yr = $base_yr + 1;
// difference to that 1st of jan
$day_diff = ($current_day - $start_day) + 1; // add today
$mon_diff = ($current_mon - $start_mon) + 1; // add current month
$yr_diff = ($current_yr - $start_yr);
// and add the rest of $base_yr
$day_diff = $day_diff + $base_day_diff;
$mon_diff = $mon_diff + $base_mon_diff;
// handle overflow of days
if ($day_diff >= $base_mon_max) {
$day_diff = $day_diff - $base_mon_max;
$mon_diff = $mon_diff + 1;
}
// handle overflow of years
if ($mon_diff >= 12) {
$mon_diff = $mon_diff - 12;
$yr_diff = $yr_diff + 1;
}
$result = '';
if ($yr_diff > 0) {
if ($yr_diff >= 5 && $yr_diff <= 20) {
$yearLabel = 'леÑ';
}
elseif ($yr_diff % 10 == 1) {
$yearLabel = 'год';
}
elseif ($yr_diff % 10 <= 4) {
$yearLabel = 'года';
}
else {
$yearLabel = 'леÑ';
}
$result .= $yr_diff . ' ' . $yearLabel . ' ';
}
if ($mon_diff > 0) {
if ($mon_diff == 1) {
$monthLabel = 'меÑÑÑ';
}
elseif ($mon_diff <= 4) {
$monthLabel = 'меÑÑÑа';
}
else {
$monthLabel = 'меÑÑÑев';
}
$result .= $mon_diff . ' ' . $monthLabel . ' ';
}
if ($day_diff > 0) {
if ($day_diff >= 5 && $day_diff <= 20) {
$dayLabel = 'дней';
}
elseif ($day_diff % 10 == 1) {
$dayLabel = 'денÑ';
}
elseif ($day_diff % 10 <= 4) {
$dayLabel = 'днÑ';
}
else {
$dayLabel = 'дней';
}
$result .= $day_diff . ' ' . $dayLabel . ' ';
}
return array($yr_diff, $mon_diff, $day_diff);
}
http://php.net/manual/en/function.date.php