За последние 24 часа нас посетили 36684 программиста и 1707 роботов. Сейчас ищет 1121 программист ...

работа с датой

Тема в разделе "PHP для новичков", создана пользователем Prettynim, 12 дек 2010.

  1. Prettynim

    Prettynim Активный пользователь

    С нами с:
    28 ноя 2009
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Ставрополь
    Подскажите, пожалуйста, вот у меня есть дата 2010-11-10, и таких у меня несколько. Мне на сайте по дизайну нужно выводить эти даты в формате СР 10 или если 2010-11-12 то Пт 12 . Подскажите как преобразовывать даты, которые у меня в бд, в соответствие с их реальными значениями? Единственное запрос к бд я уже использую вот такой
    Код (Text):
    1. SELECT DATE(date), title, id, short_story FROM `post` WHERE approve=1 and date > '$allDate' and date < '$allDate1' ORDER BY date DESC
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    PHP:
    1. <?php
    2. function myDate($mDate = '') {
    3.    if(empty($mDate)) $mDate = date('Y-m-d');
    4.    $date = explode('-', $mDate);
    5.    $time = mktime(0, 0, 1, (int) $date[1], (int) $date[2], (int) $date[0]);
    6.    $days = array(
    7.       0 => 'Вск',
    8.       1 => 'Пн',
    9.       2 => 'Вт',
    10.       3 => 'Ср',
    11.       4 => 'Чт',
    12.       5 => 'Пт',
    13.       6 => 'Сб'
    14.    );
    15.    return($days[(date('w', $time))] . ' ' . $date[2]);
    16. }
    17. echo(myDate('2010-12-12'));
    18. ?>
     
  3. Prettynim

    Prettynim Активный пользователь

    С нами с:
    28 ноя 2009
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Ставрополь
    Огромное Вам спасибо
     
  4. Devzirom

    Devzirom Активный пользователь

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
    PHP:
    1. <?php
    2. function rudate($format, $timestamp = NULL) {
    3.     $en = array(
    4.         "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday",
    5.         "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December",
    6.         "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
    7.         "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun");
    8.  
    9.     $ru = array(
    10.         "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье",
    11.         "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь",
    12.         "Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря",
    13.         "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс");
    14.    
    15.     if(is_null($timestamp)) $timestamp = time();
    16.    
    17.     $date = date($format, $timestamp);
    18.    
    19.     return str_replace($en, $ru, $date);
    20. }
    21. ?>
     
  5. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Devzirom
    Почему бы не использовать ключи в качестве альтернативного имени?
     
  6. Devzirom

    Devzirom Активный пользователь

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
    Apple, не понял, что ты хочешь сказать
     
  7. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Devzirom
    PHP:
    1. <?php
    2.  
    3. $aliases = array(
    4.  "Mon"  => "Понедельник"
    5. );
    6.  
    7. $aliases[date("...")];
    8.  
    9. ?>
     
  8. Devzirom

    Devzirom Активный пользователь

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
    Ну, а потом через цикл прогонять, или функции array_keys+array_values?

     
  9. Devzirom

    Devzirom Активный пользователь

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
    Блин, что-то не врубаюсь, как ты хочешь сделать
     
  10. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Devzirom
    1. Никаких array_values не нужно - это раз
    2. Длинное название месяцев и короткое - различаются только второй частью (первые 3 буквы идентичны)
    3. В функцию попадает формат даты, т.е мы заранее знаем, что мы можем вернуть

    Исходя из этого можно построить более сложный (в то же время более грамотный) алгоритм, не создавая кучу названий месяцев. Мы так же знаем, что название дней недели - это первые два согласных звука (ПоНедельник, ВТорник, СРеда, ЧеТверг, ...). Гласных в языке русском - 6. Это нужно учитывать при разборе (используя кратность). Это так, по теме отписываюсь.
    Люблю сложные лингвистические анализы.
     
  11. Devzirom

    Devzirom Активный пользователь

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
    Функция str_replace вначале заменяет элементы с первого по последний - это особый порядок, а не как попало. Порядок замены:
    длинные названия дней недели
    длинные названия месяцев
    короткие названия месяцев *
    короткие названия дней недели

    * - замена на родительный падеж

    В функции есть один баг с месяцем May... Используя функцию, мы не когда не получим слово "Мая", т.к. замена на "Май" произойдет раньше. Но это можно решить, небольшим регулярным выражением
     
  12. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Какая нафиг str_replace, когда речь у нас идёт о синтаксическом анализаторе? =))
     
  13. Devzirom

    Devzirom Активный пользователь

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
    Блин, напиши рабочую функцию сам! Покажи мастер класс! И я скажу, что я говно, и моё место в ветке "Программирование на PHP для новичков"
     
  14. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Каждый сам определяет своё место =))
    Но у нас речь не о том, кто говно и кому где место, верно? У нас речь о том, КАК можно подойти к решению задачи не простым перебором, а как-то более грамотно, красиво, так сказать =]
    Лично меня всегда интересовал математический подход к лингвистике в программировании, а почему бы и нет?
    И не хочу я писать, я хочу похоливарить на эту тему)
     
  15. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    все не читал, но вроде бы то что надо
    PHP:
    1. <?php
    2.  $aliases = array(
    3.   "Понедельник",
    4.   "Вторник",
    5.   "Среда",
    6.   "Четверг",
    7.   "Пятница",
    8.   "Голова болит",
    9.   "Воскресенье"
    10.  );
    11.  echo $aliases[date("L")];
     
  16. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Padaboo
    Не-не, тут речь о том, что пользователь передаёт свой формат даты, а на выходе получает перевод.
    ДЛЯ МЕНЯ наиболее грамотно распарсить параметр [format] и подставить заранее русские наименования.
     
  17. Devzirom

    Devzirom Активный пользователь

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
    =]

    Я тебе честно скажу, я в математике ноль. Больше предпочитаю традиционное программирование, без всяких там танцев с бубмом.[/list]
     
  18. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    так ?
    PHP:
    1. <?php
    2. $date = new DateTime('2010-11-12');
    3. echo $date->format('d l');
     
  19. Devzirom

    Devzirom Активный пользователь

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
    тоже неплохо=)
     
  20. Prettynim

    Prettynim Активный пользователь

    С нами с:
    28 ноя 2009
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Ставрополь
    использовала код, который в самом начале от sobachnik, все работает. Спасибо и за другие примеры, думаю мне они пригодятся.