- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
<?php
function daybefore($j){
$day = date('d');
$month = date('m');
$year = date('Y');
for ($i=0; $i<$j; $i++) {
if ($day==1) {
if ($month == 1) {
$day = 31;
$month = 12;
$year = $year - 1;
} else {
$month = $month - 1;
switch ($month) {
case 01:
$maxdays=31;
break;
case 02:
$a = $year / 4;
$b = ceil($a);
if ($a==$b){
$maxdays=29;
} else {
$maxdays=28;
}
break;
case 03:
$maxdays=31;
break;
case 04:
$maxdays=30;
break;
case 05:
$maxdays=31;
break;
case 06:
$maxdays=30;
break;
case 07:
$maxdays=31;
break;
case 08:
$maxdays=31;
break;
case 09:
$maxdays=30;
break;
case 10:
$maxdays=31;
break;
case 11:
$maxdays=30;
break;
case 12:
$maxdays=31;
break;
}
$day = $maxdays;
$year = $year;
}
} else {
$day = $day - 1;
$month = $month;
$year = $year;
}}
return "$year-$month-$day";
}
echo daybefore(3);
?>
pee 17.03.2010 15:33 # +2
hdkeeper 17.03.2010 15:35 # +4.2
guest 18.03.2010 10:37 # −9.4
usver 19.03.2010 05:02 # +1
guest 17.03.2010 20:12 # +0.4
$maxdays = 29 - ( bool ) ( $year % 4 );
Вместо деления, округления, сравнения. При желании допиливается под дополнительное условие (делится на 400, не делится на 100).
guest 17.03.2010 21:45 # +0.8
Death 18.03.2010 03:15 # −0.2
guest 24.03.2010 09:44 # +0.4
Вчерашний день?
Тогда не легче date('d',strtodate('yestarday'));
murz 24.03.2010 12:11 # −0.2
Subsanek 24.03.2010 14:12 # −0.2
murz 24.03.2010 14:50 # −0.2
guest 31.03.2010 21:14 # −0.2
$yesterday = date('U', mktime(false,false,false, date('d'), date('m'), date('Y')) - (60*60*24);