Время. Перевод из PHP в MySQL и обратно.

Манипуляции со значениями времени в PHP и MySQL с целью представления даты и времени в формате, подходящем либо для СУБД, либо для страниц сайта

Дата публикации: 17.06.2015

Порой нам необходимо переводить время из одного формата в другой. Например, нужно время из PHP-скрипта сохранить в базе данных MySQL. Всё бы ничего… но они по-разному работают со временем. И новички порой строят огромные костыли, чтобы, как им кажется, упростить свою жизнь.

Для этой статьи я возьму в пример метки времени PHP и формат времени MySQL.

PHP работает с метками времени UNIX. То есть время представляется в виде количества секунд, прошедших с начала дня 1 января 1970 года. И на момент написания статьи — 23:25 17 июня 2015 года — PHP показал вот такое время — 1434573224. А вот в MySQL время хранится в другом формате (типе данных). Я предпочитаю тип DATETIME. Упомянутая выше дата выглядела бы в таблице MySQL в поле с типом DATETIME так: 2015-06-17 23:25:00.

Перевод времени из PHP в MySQL

Ну так как же нам перевести время из PHP-скрипта в MySQL? Очень просто. Для начала, давайте решим, откуда в вашем скрипте берется какая-либо метка времени? Допустим, время регистрации пользователя является временем работы скрипта. В этом случае нам достаточно использовать встроенную в PHP функцию time (). Она и вернет текущую метку времени UNIX. А если вам нужно сохранить в базе данных дату, которую пользователь ввел в HTML-форму? Тут задача немного сложнее. Но она сама по себе несложная.


<?php
/**
 * Допустим, пользователь ввел в форму дату 23.06.2015
 * С помощью регулярных выражений мы извлечем из этой строки и день, и месяц и год * Затем с помощью функции mktime (), встроенной в php, мы получим метку времени на указанную дату
 */
$sUserDate = «23.06.2015»;

$pattern = '/^ (\d{2})\. (\d{2})\. (\d{4})$/';
$result = preg_match ($pattern, $sUserDate, $matches) ;

if ($result &&! empty ($matches)) {
	
	$day = $matches[1];
	$month = $matches[2];
	$year = $matches[3];
	
}

$time = mktime (0, 0, 0, $month, $day, $year) ;		// Получим метку времени 1435006800

?>

И как теперь сохранить это в базу? Да еще и в формате типа данных MySQL DATETIME… Легко!


	<?php
		$time = 1435006800;
		
		$sql = «INSERT INTO `table` (`reg_date`) VALUES (FROM_UNIXTIME (». $time. »))» ;
		/**
		 * Обращаю внимание, в вашей таблице `table` у поля `reg_date` тип данных
		 * должен быть DATETIME, DATE или TIMESTAMP
		 * 
		 * Для сохранения времени в базе данных мы используем функцию MySQL FROM_UNIXTIME ()
		 * Она в качестве аргумента принимает метку времени UNIX, и преобразует его */
		
		$query = mysql_query ($sql) or die (mysql_error ()) ;
	?>

 Нувотивсёбырь Задача решена! Проверьте: )

Перевести время из MySQL в PHP…

…могло бы оказаться сложнее, но нет. Это так же просто. Нет, пожалуй, это еще проще.


	<?php
		/**
		 * Для того, чтобы получить с сервера время, представленное
		 * в виде метки времени UNIX, мы используем встроенную в MySQL
		 * функцию UNIX_TIMESTAMP ()
		 * 
		 * В качестве аргумента она примет значение, которое хранится 
		 * в вашей таблице в любом из типов данных даты и времени
		 * 
		 * Более того, ей можно передать в качестве аргумента другую функцию
		 * Я передам ей функцию NOW (), которая вернет текущую метку времени
		 */
		
		$sql = «SELECT UNIX_TIMESTAMP (NOW ())» ;
		
		$query = mysql_query ($sql) or die (mysql_error ()) ;
	?>

Скажу вам больше. Если функции UNIX_TIMESTAMP () не передавать вообще никаких аргументов, результат будет тем же. Вам вернется текущая метка времени UNIX. И делайте с ним в своем скрипте теперь то, что хотите.

Наслаждайтесь!: )

Перевод времени из PHP в MySQL и из MySQL в PHP оказался делом плёвым. Вообще ерундовым. Я надеюсь, подключаться к своему СУБД вы уже умеете?

Подобные приемы очень часто нужны при написании алгоритмов регистрации и авторизации пользователей, а также просто при работе пользователя с HTML-формами, в которых он вводит дату и еще работает с динамическими списками select.

  • Я опубликовал эту статью:17.06.2015
  • 11 381
  • Яндекс.Метрика

Меню сайта

Settings

Performance

CPU Load
60%
CPU Temparature
42°
RAM Usage
6,532 MB

Customer care

Reports

Projects

May 14, 2020

Upcoming events

12:00

Donec laoreet fringilla justo a pellentesque

13:20

Nunc quis massa nec enim

14:00

Praesent sit amet