dimarina.ru

html, css и javascript1   Разное1   Рецепты программирования на PHP или практические советы по программированию7   Управление проектом1  

 

Рецепты программирования на PHP или практические советы по программированию → Преобразование даты в формат SQL

Сколько мучений доставляют как начинающему, так и продвинутому программисту работа с датами. То в одном формате надо дату, то в другом. А пользователь может ввести дату вообще, как ему вздумается. Просить пользователя в форме каждый раз вводить дату только определенного формата (например, ДД.ММ.ГГГГ) и выдавать ошибку каждый раз, когда он введет что-то иное, некрасиво. Пользователь не должен думать. Думать должен разработчик сайта. Чем тупее пользователь, тем сложнее программисту. Вот и в этом случае, функция которая преобразует много различных форматов дат в один, получилась не такая уж и маленькая и простенькая. Существует масса путей решения.

Итак, функция преобразует введенную пользователем дату формата ДД.ММ.ГГГГ, ДД/ММ/ГГГГ, ДД-ММ-ГГ и т.п. в дату, понятную mySQL или MS SQL.

В данном случае я написал функцию, которая распознает различные разделители дат. Для краткости кода и простоты (кому-то головной боли), я использовал несложные регулярные выражения. Они красивы и кратки. Например, точку, слеш или тире. Распознает одну цифру ввел пользователь или две. В случае невозможности конвертации даты, возвращает дырку от бублика, т.е. FALSE.

Конечно функция не идеальна, ее можно усовершенствовать до бесконечности. Например, сделать массив из разрешенных разделителей. Но для большинства случаев эта функция работоспособна.

1 //преобразование даты формата ДД.ММ.ГГГГ, ДД/ММ/ГГГГ и т.п. в формат ГГГГ-ММ-ДД
2 function dt2sql($dt) {
3     //определяем какой разделитель использован в дате (любое символ, кроме цифр и пробела)
4     preg_match("/([^0-9 ])/",$dt,$m);
5     if(!isset($m[1])) return FALSE;
6     //экранируем в разделитель т.к. он может являться управляющим символом регулярных выражений
7     $s preg_quote($m[1],"/");
8     //разбиваем строку на день, месяц и год    
9     preg_match("/([\d]{1,2})".$s."([\d]{1,2})".$s."([\d]{2,4})/",$dt,$m);
10     //выводим дату в формате mySQL
11     return isset($m[1]) ? y24($m[3])."-".a0($m[2])."-".a0($m[1]) : FALSE;    
12 }
13
14 //дополнительная функция, ставящая 0 перед цифрой
15 function a0($v) {    
16     return preg_match("/^\d$/",$v) ? "0".$v $v;
17 }    
18
19 //преобразует год 09 в 2009. В качестве параметра $c задается префикс = век+1
20 function y24($v,$c 20) {
21     return preg_match("/^\d{2}$/",$v) ? $c.$v $v;
22 }    
23
24 echo dt2sql("25/10/2009")."<br />";
25 echo dt2sql("5.10.2009")."<br />";
26 echo dt2sql("1-8-2009")."<br />";

Обратное преобразование даты, полученной из MySQL в любой формат делать проще-простого, особенно, если дата хранится у вас в формате TIMESTAMP. Например, если в переменной $data содержится дата, которую мы получили из БД, то чтобы вывести ДД.ММ.ГГГГ, надо сделать так:

1 echo date("Y.m.d",strtotime($date));

Комментарии:

24.07.2016 → Janaya написал:
For the love of God, keep writing these arclsiet. http://jhockxmugk.com [url=http://fbcplnv.com]fbcplnv[/url] [link=http://uliklum.com]uliklum[/link]

23.07.2016 → Kamren написал:
Your articles are for when it <a href="http://tpffnbm.com">abyueotlls,</a> positively, needs to be understood overnight.

23.07.2016 → Trisha написал:
That's really thnnikig out of the box. Thanks! http://rrodoxdwhv.com [url=http://auqlvquj.com]auqlvquj[/url] [link=http://xanjjngfhi.com]xanjjngfhi[/link]

21.07.2016 → Marilu написал:
That's a clever answer to a tricky <a href="http://sshlqpathm.com">quiotesn</a>

21.07.2016 → Rayann написал:
Oooh! Can&#39;t wait for the big reveal MEari! I&#39;m loving the frame you are going to make. Funny how I also finished a big project just yedyersat!! It&#39;s a good feeling to get it finished isn&#39;t it?!

12.07.2015 → Egy написал:
You keep it up now, <a href="http://hgjmipn.com">unsnddtaer?</a> Really good to know.

10.07.2015 → Eloise написал:
It's good to get a fresh way of loinokg at it. http://vvhxlkwnhas.com [url=http://aqueapu.com]aqueapu[/url] [link=http://lywdcpynhwn.com]lywdcpynhwn[/link]

08.07.2015 → Cheyanne написал:
This site is like a <a href="http://mkprdhiv.com">clsaorosm,</a> except I don't hate it. lol

07.07.2015 → Atakan написал:
I supspoe that sounds and smells just about right.

25.11.2014 → hp ????????? написал:
Преобразование даты в формат SQL ???? ?brother? | ??????????????????? ?? [url=http://jclawoffice.com/content/image/ink.html]hp ?????????[/url]

02.04.2013 → Нюша написал:
Про руки подтверждаю, веет какой-то мертвечиной. Аж жуть берёт

20.10.2012 → aolxbbdrrfs написал:
JlNLwp , [url=http://rzmqgwsnkpyu.com/]rzmqgwsnkpyu[/url], [link=http://sgtlccwbedzq.com/]sgtlccwbedzq[/link], http://jclneoqatlru.com/

19.10.2012 → tyekduv написал:
jnssuD <a href="http://ujtyirzkkrhe.com/">ujtyirzkkrhe</a>

16.10.2012 → tjawewg написал:
cazKXN , [url=http://orbxhrkkjdci.com/]orbxhrkkjdci[/url], [link=http://gycdztixgbbx.com/]gycdztixgbbx[/link], http://vzjgtwmzatad.com/

15.10.2012 → mqbwsrjhq написал:
wn00wL <a href="http://qyanxuszppyn.com/">qyanxuszppyn</a>

15.10.2012 → Diab написал:
Geez, that's unbeilevalbe. Kudos and such.

29.11.2011 → Сергей написал:
Спасибо. Помогло переворотить время в уже существующей базе.

08.10.2011 → Владимир написал:
Благодарю за статью! Только вот эти руки очень жутко смотрится на тёмном фоне, меня аж передёрнуло, когда увидел)

Написать комментарий





Включите отображение картинок в браузере
Число на картинке: