 
			
				08.11.2017, 14:13
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
//получение даты из строкового представления в формате Ymd или dmY, любое представление и разделитель будут корректно обработаны
$timestamp = strtotime(дата или дата/время или английская строковая нотация)
//создание объекта DateTime из timestamp
new DateTime("@timestamp")
//установка даты
$date = new DateTime()
$date->setDate(год, месяц, день) //которые можно получить из любого источника
//и т.д., и т.п.
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.11.2017, 14:22
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.12.2012 
					
					
					
						Сообщений: 3,841
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 laimas, может я не совсем догоняю, но это ведь куда геморойнее получается, чем просто изменить строку. 
Зачем так извращаться? 
 
PS. Суть тех двух строк была в том, что они делали прошедшую дату будущей и скрипт из-за этого рассчитывал именно оставшееся время до birth day, а не прошедшее с этого дня время. 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Nexus, 08.11.2017 в 14:28.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.11.2017, 14:53
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Nexus
			
		
	 | 
 
	
		может я не совсем догоняю, но это ведь куда геморойнее получается, чем просто изменить строку. 
Зачем так извращаться?
	 | 
 
	
 
 Так считаете? Вы не работаете в рамках класса, хотя используя его методы, одним из которых гораздо проще установить необходимую дату, чем запускать REGEX, затем заменять еще раз в строке. То что вы делаете, это и есть извращения. )
 
Более того, корректно все таки работать с датой/временем, а не с датой уже потому, что проверка на больше ли одна дата другой не имеет смысла - не может текущая дата быть меньше даты дня рождения, в противном случае это человек, который только родится в будущем, но уже живой.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.11.2017, 15:13
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.12.2012 
					
					
					
						Сообщений: 3,841
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от laimas
			
		
	 | 
 
	| 
		Более того, корректно все таки работать с датой/временем, а не с датой уже потому, что проверка на больше ли одна дата другой не имеет смысла - не может текущая дата быть меньше даты дня рождения, в противном случае это человек, который только родится в будущем, но уже живой.
	 | 
 
	
 
 Вы путаете смысл, который закладывается в "день рождения". 
Когда говорят фразу "я приду на твой др" вы же не думаете, что пользователь сконструирует машину времени и вернется в прошлое. Поэтому в контексте этой задачи дата bd обязана быть в будущем времени.
 
Если я не приведу bd к будущему времени, то узнаю не сколько осталось до bd, а сколько прошло времени с этого дня.
 
Код ниже находит возраст пользователя, каким образом из этого состояния можно получить кол-во дней до будущего др я не могу, пока что, сообразить.
 
<?php
	$bd='11.12.1994';
	$bd=new DateTime($bd);
	$now=new DateTime();
	
	$Interval=$now->diff($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]);
    }
 
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.11.2017, 15:36
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Nexus
			
		
	 | 
 
	| 
		Если я не приведу bd к будущему времени, то узнаю не сколько осталось до bd
	 | 
 
	
 
 Я не об этом, устанавливайте, но зачем сравнение, если разность дат и дает ответ.
 
PS. Чтобы не мурыжить и не развивать баталий    У вашего друга День рождения, вы приходите и "С Днюхой, друган!", или же "Осталось 0 месяцев, 0 дней, откупоривай!"? То есть date->diff(date) дает ответ - поздравлять или нет, зачем здесь условие? Мы и так знаем, что дата может быть меньше или разность дат равна 0. Мы без всяких предварительных условий узнаем,... так и тянуться руки подменить "to be or not to be" на "drink or not drink".    
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось laimas, 08.11.2017 в 16:00.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.11.2017, 16:06
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.12.2012 
					
					
					
						Сообщений: 3,841
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от laimas
			
		
	 | 
 
	| 
		разность дат и дает ответ
	 | 
 
	
 
 Только, если др в этом году еще не был, в противном случае получаем время, прошедшее с дня рождения в этом году до текущего дня.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.11.2017, 16:09
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 14.01.2015 
					
					
					
						Сообщений: 12,989
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Да что за глюки с форумом. 
 
Не важно, отрицательный результат, это значит уже пили. ) 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.11.2017, 17:23
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 17.06.2016 
					
					
					
						Сообщений: 509
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Nexus
			
		
	 | 
 
	| 
		Зачем так извращаться?
	 | 
 
	
 
 Идеальный код. 😹
 
Товарищ цитирует строку.
 
echo "Lorem ipsum dolar";
 
На что заметит - "Это не правильно строки в пшп обрамляются в одинарные кавычки."
 
- Спасибо! Поправил.
 
echo 'Lorem ipsum dolar';
 
- Не правильно. Dolar пишется через "о".
 
-  Согласен, ошибка. Поправил. Только  не правильно пишется слитно...  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Rasy, 08.11.2017 в 17:25.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.11.2017, 17:30
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.12.2012 
					
					
					
						Сообщений: 3,841
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от laimas
			
		
	 | 
 
	| 
		Не важно, отрицательный результат, это значит уже пили. )
	 | 
 
	
 
 Классно, конечно, но нужно же узнать не были ли распиты спиртные напитки или нет, а через какое кол-во времени можно будет вновь отметить. 
Как адекватно и без условия решить задачу - хз.
 
Будет интересно взглянуть на ваше решение.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.11.2017, 17:32
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.12.2012 
					
					
					
						Сообщений: 3,841
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Rasy, не понял смысла вашего сообщения. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 
 
 
 
	 | 
 
 
 |