Скрипт, который считает, сколько дней осталось до дня рождения
Хорошо ли получилось?
<?php $now = date('d.m.Y'); //сейчас $nowArr = explode('.', $now); $monthNow = date('t', mktime(0, 0, 0, $nowArr[1], $nowArr[0], $nowArr[2])); //текущий месяц $birthday = '23.03.1994'; //день рождение $arr = explode('.', $birthday); $monthBirthday = date('t', mktime(0, 0, 0, $arr[1], $arr[0], $arr[2])); //месяй день рождения $rest = $monthBirthday - $arr[0]; //отсёк остальные дни, которые идут после моего дня рождения в этом месяце. $days = 0; for($i = $nowArr[1]; $i <= 12; $i++) { $days = $days + date('t', mktime(0, 0, 0, $i, $nowArr[0], $nowArr[2])); // количество дней до конца года сначала месяца if($i == $arr[1]) break; if($i == 12) { for($j = 1; $j <= $arr[1]; $j++) { $days = $days + date('t', mktime(0, 0, 0, $j, $nowArr[0], $nowArr[2])); // количество дней до конца нужного месяца сначала месяца } } } echo $days - $nowArr[0] - $rest - 1; |
Цитата:
|
По-моему букаф много.
<?php $bd=preg_replace('#\d{4}#',$cur_year=date('Y'),'11.12.1994'); if(strtotime('today')>strtotime($bd)) $bd=str_replace($cur_year,1+$cur_year,$bd); $Interval=(new DateTime())->diff(new DateTime($bd)); $months=$Interval->format('%m'); $days=$Interval->format('%d'); echo 'Осталось ', $months>0?$months.' '.plural($months,array('месяц','месяца','месяцев')).' ':null, $days>0?$days.' '.plural($days,array('день','дня','дней')):null; //© https://gist.github.com/fomigo/2382775 function plural($n,$forms){ return $n%10==1&&$n%100!=11?$forms[0]:($n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$forms[1]:$forms[2]); } http://sandbox.onlinephpfunctions.co...c8f529f439e3f6 |
:write: ещё бы 1 месяц, 2 месяца, 5 месяцев :)
|
рони, поправил скрипт.
|
Nexus,
:thanks: |
Цитата:
|
Цитата:
Можно перевести $bd в unix, тогда будет точно корректно сравнивать. Upd. Согласен, ошибка. Поправил. |
Nexus,
можно и строки, но формат даты должен быть европейский - год, месяц, число. Хотя используется же DateTime, так почему не использовать его на все 100, зачем эти махинации $bd=preg_replace('#\d{4}#',$cur_year=date('Y'),'11 .12.1994');, $bd=str_replace($cur_year,1+$cur_year,$bd);? |
Цитата:
Продемонстрируйте, пожалуйста, на что "DateTime" еще способен. Полагаю вы поняли смысл модифицирования строки с датой рождения. |
Часовой пояс GMT +3, время: 19:28. |