Помощник
|
Помогите составить рег. выражение |
happyhand
|
Сообщение
#1
|
||
|
|
||
|
|||
Mulder_hb |
13.6.2010, 16:44;
Ответить: Mulder_hb
Сообщение
#2
|
|
Формируем timestamp:
[php] $stamp = strtotime("10 Мая 2010"); [/php] Такой способ может не работать. Тогда парсим дату и формируем timestamp. [php] <?php $str = "10 Мая 2010"; // Парсим дату $reg = '{^\s* ( (\d+) \s* [[:punct:]] \s* (\S+) \s* [[:punct:]] \s* (\d+) ) \s*$}xs'; preg_match($reg, $str, $pockets) or die("Это не дата."); // pockets[2] - день // pockets[3] - месяц // pockets[4] - год // Формируем timestamp $stamp = mktime(0, 0, 0, $pockets[3], $pockets[2], $pockets[4]); ?> [/php] |
|
|
happyhand
|
Сообщение
#3
|
|
Говорит "Это не дата"
|
|
|
Mulder_hb |
13.6.2010, 20:15;
Ответить: Mulder_hb
Сообщение
#4
|
|
А если так:
{^\s* ( (\d+) \s* [[:punct:]] \s* (\S+) \s* [[:punct:]] \s* (\d+) ) \s*$}xs Это универсальный скрипт парсинга. Может стоит чуть ослабить проверку. |
|
|
alexflasher |
13.6.2010, 22:37;
Ответить: alexflasher
Сообщение
#5
|
|
Mulder, во-первых
(\s+) по вашему, будет сохранять месяц? Во-вторых, к чему здесь "[[:punct:]]"? Автор ничего не упоминал о знаках пунктуации, к тому же, ваш реджекс не пропустит даты, которые без пунктуации. Я бы, при условии, что строки будут содержать только "00 Месяц 0000", сделал бы так: [PHP]<?php $str = "10 Мая 2010"; $reg = '/^(\d+)\s*(\w+)\s*(\d+)$/'; preg_match($reg, $str, $pockets) or die("Это не дата."); print 'День: ' . $pockets[1] . '<br>'; print 'Месяц: ' . $pockets[2] . '<br>'; print 'Год: ' . $pockets[3] . '<br>'; ?> [/PHP] только могут быть проблемы с кирилицей - надо правильно настроить локаль. С php мало знаком, как все это преобразовать потом в реальную дату не знаю.. |
|
|
ottaviano |
13.6.2010, 23:05;
Ответить: ottaviano
Сообщение
#6
|
|
sergey-g, если я правильно тебя понял и тебе нужно вытянуть из даты три "величины" (день, месяц и год), то можно просто воспользоватся функцией
[PHP]explode(" ", $var);[/PHP] например: [PHP] $var1 = "10 Мая 2010"; $var2 = explode(" ", $var1); echo $var2[0]; // покажет 10 echo $var2[1]; // покажет май echo $var2[2]; // покажет 2010 [/PHP] но все эти данные типа String, следующие строки переводят String-числа в int-числа, теперь с ними можно проводить математические вычисления (если необходимо, конечно же) [PHP] $var2[0] = (int)$var2[0]; $var2[2] = (int)$var2[2];[/PHP] |
|
|
happyhand
|
Сообщение
#7
|
|
А потом преобразовать её в формат "2010-05-10" чтобы обработать функцией strtotime.
Сделал так: [php]$test= "10 Мая 2010"; $date=explode(" ",$test); echo $date['2']."-"; if($date['1']=="Января")echo "01";if($date['1']=="Февраля")echo "02";if($date['1']=="Марта")echo "03";if($date['1']=="Апреля")echo "04";if($date['1']=="Мая")echo "05";if($date['1']=="Июня")echo "06";if($date['1']=="Июля")echo "07";if($date['1']=="Августа")echo "08";if($date['1']=="Сентября")echo "09";if($date['1']=="Октября")echo "10";if($date['1']=="Ноября")echo "11";if($date['1']=="Декабря")echo "12"; echo"-"; echo $date['0'];[/php] но теперь не знаю, что с этим делать:rolleyes: Можно ли как-то запихнуть это в переменную? |
|
|
ottaviano |
14.6.2010, 22:32;
Ответить: ottaviano
Сообщение
#8
|
|
|
|
|
happyhand
|
Сообщение
#9
|
|
Ну вот эта строчка
[php]echo $date['2']."-"; if($date['1']=="Января")echo "01";if($date['1']=="Февраля")echo "02";if($date['1']=="Марта")echo "03";if($date['1']=="Апреля")echo "04";if($date['1']=="Мая")echo "05";if($date['1']=="Июня")echo "06";if($date['1']=="Июля")echo "07";if($date['1']=="Августа")echo "08";if($date['1']=="Сентября")echo "09";if($date['1']=="Октября")echo "10";if($date['1']=="Ноября")echo "11";if($date['1']=="Декабря")echo "12"; echo"-"; echo $date['0']; [/php] выводит на экран мою дату в формате "2010-05-10", но нужно, чтобы эта дата находилась в переменной, т.е. чтобы потом вычислить timestamp. strtotime('2010-05-10'). Или есть другой способ вычислить timestamp с даты формата "10 Мая 2010" не переводя её в "2010-05-10"? |
|
|
ottaviano |
14.6.2010, 22:59;
Ответить: ottaviano
Сообщение
#10
|
|
strtotime - для етой функции ты можешь использовать свой вариант даты "10 мая 2010"
|
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Помогите вспомнить рекламного бота Телеграм для обмена рекламой | 0 | Mixatraider | 678 | 21.2.2024, 23:42 автор: Mixatraider |
|
Как составить уравнение, чтобы назначить цену для товара? | 0 | rownong27 | 650 | 31.12.2023, 12:07 автор: rownong27 |
|
Помогите рещить проблему с монитором. Почему низкое разрешение при подключении монитора через displayport? |
0 | Levels | 1693 | 11.12.2020, 0:48 автор: Levels |
|
Помогите кто нибудь получить партнерку Росбанк! | 7 | heisenberg_mw | 2302 | 7.8.2020, 9:28 автор: heisenberg_mw |
|
Помогите найти тему пожалуйста | 7 | virtas | 12373 | 24.7.2020, 17:02 автор: -JamesSmips- |
Текстовая версия | Сейчас: 19.3.2024, 7:23 |