Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Следующий и предыдущий месяц с переходом по годам
 
 автор: OLi   (30.09.2013 в 20:24)   письмо автору
 
 

Здравствуйте.

Столкнулся со сложностью связанной с датами.
Имеется входная переменная со значение от 1 до 12 (номер месяца).
Переменная меняется на +1 и -1.

1-я проблема - переход за пределы 1 и 12
2-я проблема: подставить значение полученного месяца $current_month и учесть переход в годах

$begin = mktime(0, 0, 0, $current_month, 1, date("Y"));

  Ответить  
 
 автор: Igorek   (01.10.2013 в 01:41)   письмо автору
 
   для: OLi   (30.09.2013 в 20:24)
 

<?php
$month 
1;
$delta = -1;

$interval = new DateInterval('P1M');
$date = new DateTime("2006-$month-10");
(
$delta 0) ? $date->add($interval) : $date->sub($interval);
echo 
$date->format('Y-m-d');

  Ответить  
 
 автор: confirm   (01.10.2013 в 06:35)   письмо автору
 
   для: OLi   (30.09.2013 в 20:24)
 

Чем лучше воспользоваться зависит от контекста для которого нужна эта дата. Но mktime не удобна для таких операций, в общем случае удобней strtotime:
<?
echo date('Y-m-d'strtotime('now +1 month'));
echo 
date('Y-m-d'strtotime('now -1 month'));
echo 
date('Y-m-d'strtotime('2013-12-20 +1 month'));

А возможно удобнее будет работать с объектами Date.

  Ответить  
 
 автор: Oli   (01.10.2013 в 09:41)   письмо автору
 
   для: confirm   (01.10.2013 в 06:35)
 

Спасибо. Но мне нужно делать переход по месяцам/годам от заданного месяца. А не от текущего

  Ответить  
 
 автор: confirm   (01.10.2013 в 09:49)   письмо автору
 
   для: Oli   (01.10.2013 в 09:41)
 

А строка три примера раз не поясняет как это сделать? Strtotime разбирает строку описывающей дату в английской нотации. Ознакомтесь в руководстве с этой функцией и допустимыми форматами даты, станет понятно, что описать можно что угодно.
И я говорил, что все зависит от контекста, и если к примеру речь идет о календаре и переходе в нем, то текущая дата которую вам надо модифицировать известана.

  Ответить  
 
 автор: oli   (01.10.2013 в 10:53)   письмо автору
 
   для: confirm   (01.10.2013 в 09:49)
 

Из примера
echo date('Y-m-d', strtotime('now +1 month'));

я понял, что к текущей дате добавляетс + 1 месяц.
Исходя из вашего замечания я могу сделать так:

$current_month = 12;
date('Y-'.$current_month.'-d', strtotime('now +1 month'));


Даст ли мне это +1 месяк и переход на следующий год в случае $current_month > 12?

  Ответить  
 
 автор: confirm   (01.10.2013 в 11:02)   письмо автору
 
   для: oli   (01.10.2013 в 10:53)
 

А вы сами поняли какую фигню написали? )
Первый аргумент функции date задает выходной формат даты, и разве может быть в этом формате некая переменная $current_month?
Явно она должна быть указана для функции strtotime, так ведь? Эта же функция получает из строки указанной временную метку для функции date.
Вопрос только в том - текущий месяц чего? Если вам известна эта величина, и вам надо ее модифицировать на плюс/минус месяц, то указывайте эту величину плюс/минус month.
Я же не в курсе к чему вы пытаетесь что-то добавить.

  Ответить  
 
 автор: OLi   (02.10.2013 в 14:03)   письмо автору
 
   для: confirm   (01.10.2013 в 11:02)
 

т-е вы хотели сказать примерно следующее?

$current_month = 10;
$current_month ++ ;
$time = strtotime("2010-".$current_month."-11");
$final = date("Y-m-d", strtotime("+1 month", $time));

  Ответить  
 
 автор: confirm   (02.10.2013 в 14:29)   письмо автору
 
   для: OLi   (02.10.2013 в 14:03)
 

Я вообще ничего не хочу, это вам чего-то надо.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования