Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Monday this week 
:(
    Опции темы
BuShaRt
Дата 11.3.2013, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



Функция DateTime::modify призвана модифицировать дату, согласно условию. В моем случае я хочу получить дату понедельника. На пример для даты 13.03.2013 датой понедельника будет 11.03.2013.
В целом функция работает хорошо, но есть одна загвоздка, которая (как я понимаю) связана со специфическим различием недель в разных странах: где-то неделя начинает в воскресенье, а где-то в понедельник.
Так вот и получается не привычная для русского человека картинка, что для даты 10.03.2013 понедельником текущей недели будет не 04.03.2013, а 11.03.2013 т.к. php считает, что с воскресенья началась следующая неделя.

Для наглядности календарик:
user posted image

Я перепробовал много вариантов, включающих смену локали и т.п. - нечего не помогает. Похоже на то, что в данном случае PHP категоричен.
Как выход из ситуации я начал использовать derty huck - перед тем как применить модификацию "Monday this week", я применяю другую "- 1 day", тем самым смещая указатель даты влево. Конечно в какой-то мере это решает проблему, но создает некоторое неудобство в читабельности кода и я уверен, что может вылиться в проблемы.

Может быть у кого-нибудь есть опыт решения этой проблемы? 
PM MAIL   Вверх
Gold Dragon
Дата 12.3.2013, 05:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



а если просто для нормальных стран использовать 
Код

$date->format('N');

а для глупых американских
Код

$date->format('w');

И от этого уже плясать .. 



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
BuShaRt
Дата 13.3.2013, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



Gold Dragon, 
Тут чуть-чуть другая задача. То, что Вы предлагаете - это лишь часть функционала, концепция которого инкапсулированна в DateTime::modify. Так вот там уже жестко забита логика типа $date->format('w'); и как изменить ее на $date->format('N'); я не понимаю. Это же объект самого PHP, я не могу менять его логику переписыванием.
PM MAIL   Вверх
Aliance
Дата 13.3.2013, 14:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Цитата(BuShaRt @  13.3.2013,  15:06 Найти цитируемый пост)
Это же объект самого PHP, я не могу менять его логику переписыванием. 

почему нет?
Код

class myDateTime extends DateTime {

    public static function modify() { ... }

}

PM MAIL WWW ICQ Skype   Вверх
BuShaRt
Дата 14.3.2013, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



Aliance, 
Я имел ввиду, что я не могу изменить ход работы функции поменяв в исходнике одну букву.
PM MAIL   Вверх
Aliance
Дата 15.3.2013, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Ну в теории и это возможно, только это было бы глупо. Зачем, если есть наследование.
PM MAIL WWW ICQ Skype   Вверх
Gold Dragon
Дата 15.3.2013, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



а какая вообще конечная цель.. не могу уловить суть задачи.. Может есть и другой подход...


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0471 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.