|
|
|
| Добрый день! Подскажите пожалуйста, как узнать дату формата (21-02-2013) зная номер недели (8), год и полное название дня (Monday) если такое возможно | |
|
|
|
|
|
|
|
для: SeletSKY
(21.02.2013 в 13:02)
| | возможно
вот только при каких обстоятельствах возникла такая задача?
откуда поступают данные и куда сохраняются?
(файл -> файл, база -> файл, файл -> база или база -> база)
или это парсер и вы тырите контент без зазрения совести? :) | |
|
|
|
|
|
|
|
для: SeletSKY
(21.02.2013 в 13:02)
| | Понедельник восьмой недели года текущего, это 18 число, а не 21. Если вы упоминаете 21, значит это уже относительная дата будет. | |
|
|
|
|
|
|
|
для: SeletSKY
(21.02.2013 в 13:02)
| | Вот можно так. вроде даже правильно))
<?php
// исходные данные
$num_of_week = 8;
$year = date("Y");
$day_name = 'Monday';
$days = array(
'monday' => 1,
'tuesday' => 2,
'wednesday' => 3,
'thursday' => 4,
'friday' => 5,
'saturday' => 6,
'sunday' => 7
);
$num_of_week = sprintf("%02d", $num_of_week);
$num_of_day = $days[strtolower($day_name)];
echo strftime('%d-%m-%Y',strtotime($year."-W".$num_of_week."-".$num_of_day));
|
может есть лучше вариант? Или как хотя бы получить номер дня недели без использования массива? | |
|
|
|
|
|
|
|
для: Igorek
(21.02.2013 в 13:53)
| | strtotime() для этого есть. | |
|
|
|
|
|
|
|
для: confirm
(21.02.2013 в 13:55)
| | strtotime возвращает timestamp, а мне нужен порядковый номер дня недели по его названию. Или как?
UPD
видимо так:
<?php
echo strftime("%u",strtotime('Tuesday'));
|
| |
|
|
|
|
|
|
|
для: Igorek
(21.02.2013 в 13:53)
| | с учетом новых данных:
<?php
// исходные данные
$num_of_week = 8;
$year = date("Y");
$day_name = 'friday';
$num_of_week = sprintf("%02d", $num_of_week);
$num_of_day = strftime("%u",strtotime($day_name));
echo strftime('%d.%m.%Y',strtotime($year."-W".$num_of_week."-".$num_of_day));
|
| |
|
|
|
|
|
|
|
|
для: confirm
(21.02.2013 в 14:05)
| | Для решения вопроса ТС я использую формат(наиболее подходящий в данном случае) YY "-"? "W" W "-"? [0-7] (Год, неделя в формате ISO и день недели) http://www.php.net/manual/ru/datetime.formats.compound.php
Соответственно из исходных данных мне нужно получить только номер дня недели по его имени, что я и сделал:
<?php
$num_of_day = strftime("%u",strtotime($day_name));
|
Собственно, что вы хотели сказать? можно проще или я что-то неправильно делаю?
Хотя бы ткните носом куда именно в мануале смотреть, иначе не догоняю)) | |
|
|
|
|
|
|
|
для: Igorek
(21.02.2013 в 16:04)
| | Вы спрашивали можно ли проще, приводя свой громоздкий пример. Вот к тому и ссылка о форматах представления даты для strtotime(), которая и позволяет избежать этих сложностей. | |
|
|
|
|
|
|
|
для: confirm
(21.02.2013 в 16:14)
| | т.е. последний вариант можно считать оптимальным? я думал критика к нему относится | |
|
|
|
|
|
|
|
для: Igorek
(21.02.2013 в 16:19)
| | Спасибо! Всем спасибо ребят, реально выручили.. я тут другим был запарен, а Вы тут готовое решение накатали! Всем пива!))) | |
|
|
|
|
|
|
|
для: Igorek
(21.02.2013 в 16:19)
| | Ну вы же читали о функции strtotime(), которая разбирает английское строковое представления даты/времени, формат которой и описан по ссылке. А из этого материла ясно, что ваши промежуточные вычисления $num_of_week и $num_of_day совсем не обязательно делать. | |
|
|
|
|
|
|
|
для: confirm
(21.02.2013 в 17:12)
| | Думается мне, что вы ошибаетесь. Я не зря привел пример выбранного формата (со страницы компоновки форматов):
YY "-"? "W" W "-"? [0-7], где YY - [0-9]{4}, W - "0"[1-9] | [1-4][0-9] | "5"[0-3]
т.е. номер недели обязательно число с с предшествующим нулем, если меньше 10, поэтому нужен sprintf. А номер дня недели - обязательно число от 0 до 7.
Т.о.
<?php
echo strftime('%d.%m.%Y',strtotime("2013-W02-tuesday")); // некорректно (01.01.1970)
echo strftime('%d.%m.%Y',strtotime("2013-W2-2")); // некорректно (01.01.1970)
echo strftime('%d.%m.%Y',strtotime("2013-W02-2")); // корректно (08.01.2013)
|
| |
|
|
|
|
|
|
|
для: Igorek
(21.02.2013 в 17:28)
| | Это вы ошибаетесь, ибо совсем не обязательно указывать тот формат, который вы представляете, можно и так написать:
<?
echo date("d-m-Y", strtotime('second day 2013-01-01 +7 weeks'));
|
А можно и по другому, почитайте в руководстве. Вот только что за дату все таки надо, это вопрос, ибо понедельник восьмой недели никак не 21, уж тем более не 08.01.2013. | |
|
|
|
|
|
|
|
для: confirm
(21.02.2013 в 17:37)
| | > уж тем более не 08.01.2013
мой последний пример был не для вычисления даты понедельника восьмой недели
> echo date("d-m-Y", strtotime('second day 2013-01-01 +7 weeks'));
Если бы это выражение вычисляло второй день недели от (2013-01-01 +7 weeks) - было бы интересно (хотя здесь и нет названия дня недели, что является исходным условием), но это не так.
> А можно и по другому, почитайте в руководстве
Вполне возможно, что возможно. Вот только я пока не вижу другого решения. Рукодство читаю и перечитываю - не помогает. Будьте так добры - приведите пример, ибо действительно интересно) | |
|
|
|
|
|
|
|
для: Igorek
(21.02.2013 в 18:43)
| | Я вам уже привел пример, а в руководстве масса определений, именно по ним strtitime() разбирает английскую нотацию строкового представления даты. Так что пробуйте, лучше усвоите. )
Но это второстепенное, ибо никто не запрещает делать так, как вы делали. А вот первичное так и осталось не понятным и без ответа - говорят о понедельнике, а, судя по дате, хотят совсем не этот день. Так что не понять, то-ли от первого дня года (а это был вторник), второй день недели (в английской нотации это и есть понедельник), что и есть в моем примере, и чего вроде бы хотят. То-ли действительно нужен понедельник.
Не понять, а ребусы решать я не хочу. ) | |
|
|
|