Вычисление даты и перевод времени на зимнее

beriv

Guest
Вычисление даты и перевод времени на зимнее

Такая задача:
есть даты в секундах межды ними надо вычислить все даты в реальном формате (месяц-день-год), это осуществляется простейшим циклом и работает нормально до того момента пока не встретит день перевода времени,
вот далее для пояснения привожу скрипт:
PHP:
<?

$dat1=mktime(0,0,0,10,23,2003); //10 ноября 2003 в секундах
$dat2=mktime(0,0,0,10,28,2003); //28 ноября 2003 в секундах

while($dat2>=$dat1)
{
	echo date("d-m-Y", $dat1) . "<br>\n";
    $dat1+=86400; // прибавим 86400 секунд (24 часа)  чтобы получить дату следущего дня
}

?>

его вывод получается таким:
23-10-2003
24-10-2003
25-10-2003
26-10-2003
26-10-2003
27-10-2003

т.е два раза повторяется 26 ноября из-за перевода времени на 1 час.
Теперь я думаю проблема ясна :)
Как ее правильно решить?
 

Фанат

oncle terrible
Команда форума
специально для тебя написано замечание в документации по функции [m]date[/m]
 

beriv

Guest
Это в mktime() день прибавлять?
нет мне такое не катит, у меня даты изначально хранятся в секундах
 

Фанат

oncle terrible
Команда форума
привередничать будешь в ресоране.
Ты спросил, как правильно - тебе сказали.
Не нравится - сиди со своими ошибками.
сделать преобразование из таймстампа в массив - один оператор. Не загнется от этого твой пхп, не бойся.
 

Profic

just Profic (PHP5 BetaTeam)
beriv
даже если они храняться в секундах (не в базе ли данных?), тебе, что сложно из твоих значений извлечь день, месяц и год? Учитывая, что для этого даже есть спец. ф-ция. А вот какая не скажу. Ищи сам [m]ref.date[/m]
 

beriv

Guest
Автор оригинала: Фанат
привередничать будешь в ресоране.
Ты спросил, как правильно - тебе сказали.
Не нравится - сиди со своими ошибками.
сделать преобразование из таймстампа в массив - один оператор. Не загнется от этого твой пхп, не бойся.
Тогда спрошу по другому: есть ли еще какой-нибудь вариант?


Автор оригинала: Profic
beriv
даже если они храняться в секундах (не в базе ли данных?), тебе, что сложно из твоих значений извлечь день, месяц и год? Учитывая, что для этого даже есть спец. ф-ция. А вот какая не скажу. Ищи сам [m]ref.date[/m]
Нет не в базе :) в обычном текстовике
 

Фанат

oncle terrible
Команда форума
beriv
ты сам-то понимаешь, что спрашиваешь?
- Какой вариант правильный?
- Такой-то.
- А другой есть?

ЕСТЬ. неправильный.
Такой, как ты используешь.
Прибавлять надо не секунды, а ДНИ.
Дни прибавляет мктайм И НИЧТО БОЛЬШЕ.
Неужели так сложно понять?
Есть правило. ОЧЕНЬ простое.
ДЛЯ ВЫЧИСЛЕНИЯ ДАТ В PHP ИСПОЛЬЗУЕТСЯ ТОЛЬКО mktime
Неужели так сложно понять?
И применять его везде, где требуется работа с датой?

И, главное - из-за чего сыр-бор - из за ОДНОГО оператора getdate!
 

beriv

Guest
короче вот сам придумал как это обходить:
PHP:
<?

$dat1=mktime(0,0,0,10,23,2003);
$dat2=mktime(0,0,0,10,28,2003);
$tmp2="";
while($dat2>=$dat1)
{
	$tmp1=date("d-m-Y", $dat1);
    if($tmp1!==$tmp2) echo  $tmp1. "<br>\n";

    $dat1+=86400;
    $tmp2=$tmp1;
}
?>
 

neko

tеam neko
я вот думаю
пытались ему помочь - нахамил
код кривой свой, тоже сам себе написал

может ненужен форум таким?
может бан сразу?
 

beriv

Guest
Автор оригинала: neko
я вот думаю
пытались ему помочь - нахамил
код кривой свой, тоже сам себе написал

может ненужен форум таким?
может бан сразу?
Я хамил? ты прочитай все сверху и увидишь кто первый начал, я все корректно говорил
 

Profic

just Profic (PHP5 BetaTeam)
neko
я только за

beriv
А теперь скажи КАКОГО ХР*НА заводить 2 доп. переменные, когда можно ограничится 1 массивом.

Кстати, а как будешь решать проблему нехватки одного дня весной? Или ты со своими куриными мозгами совсем забыл об этом? Не допёр, что если проблема есть осенью, то будет и весной, причем с точностью до наоборот.

ЗЫ. Они кололись и царапались, но продолжали изобретать велосипед...
 

beriv

Guest
Profic
да ты прав один день пропадет...
придется mktime использовать хотя не хотелось

да и кстати фиг обзываться? я все нормально и корректно говорю, это тут народ новый развелся больно сильно вые*стый
я тебе лично говорил? нет! фиг тогда лезть?
 

Profic

just Profic (PHP5 BetaTeam)
beriv
1) это еще не обзывание
2) а реакция у меня такая, потому, что ты
a) положил с большой колокольни на мой совет
b) еще и прибежал рассказывать, какой ты умный: вот полюбуйтесь, написал.
c) доказал, что головой ты думать не умеешь.

Я всё сказал.
 

beriv

Guest
Profic
я тебе ответил, а не "положил с большой колокольни"
и кстати в своем контакте обнаружил твою асю 32916799, с чего бы ето интересно?

Короче все, тема закрыта, я не собираюсь ни с кем пререкаться без толку и заниматься словоблудством.
Всем спасибо за участие ;)
 

Profic

just Profic (PHP5 BetaTeam)
beriv
Доказательства? Их есть у меня:
a) Странно, как-то: ответ был на вопрос из 5 слов. А мой пост содержал намного больше слов.
b) Здесь. В этом топике. Твой 4-й пост.
с) Про весну и не подумал. Совсем. Т.е. даже не представлял себе, что будет тогда-то и при таких-то обстоятельствах (а это основное занятие программера)

Объясни, будь добр, чем тебе "не катит mktime" (не сейчас, когда тебе "приходится её использовать" и он уже видимо "катит", а когда ты писал свой второй пост в этой теме)?
Как объяснишь, тогда и будет тема исчерпана :)

(Если я у кого-то есть в контактах, значит этот кто-то добавил меня к себе в контакты. Все. Ничего более это не значит)

ЗЫ. Совет. Пока бесплатный. Учись асбтрагироваться. Не (для примера) "мне нужно вырезать от сих до сих", а "мне нужно обработать строку". Не "мне нужно прибавить 86400 СЕКУНД", а, учитывая, что есть дни в которых 90000 или 82800 секунд, "мне нужно прибывать один ДЕНЬ"
 

beriv

Guest
Profic
a) мне еще и слова считать нужно? я ответил так как считал нужным и вполне исчерпывающе
b) ну и что? я так подумал что правильно будет
с) ошибаешься, я подумал, представил себе это и прикинув, что прибавляется 3600 секунд, а не убавляется, поэтому день теряться не может и даты будут идти правильно.
и это сейчас проверил, и самое интресное оно так и оказалось:
PHP:
<?
$dat1=mktime(0,0,0,3,22,2004);
$dat2=mktime(0,0,0,4,5,2004);

while($dat2>=$dat1)
{
    echo  date("d-m-Y", $dat1). "<br>\n";
    $dat1+=86400;
}

?>
сам проверь :)
что скажешь?

Про не катит: я тут специально этот пример придумал, чтобы вам понятнее было, на самом деле у меня сложнее делается, и использование mktime не удобно, - нужно много кода переделать.

Про контакт: если у меня кто-то в контакте, то это значит, я с ним общялся. вот.

Про совет: я всегда думаю прежде чем отпрограммировать что-либо, анализирую и выбираю альтернативы, и если я сделал так, то на это были причины.
 

Profic

just Profic (PHP5 BetaTeam)
Я не собираюсь тут писать, почему именно нужно всегда использовать mktime для вычисления дат. Это просто нужно запомнить. Как определение. В противном случае может возникнуть много непонятных глюков (я не говорю, что они будут обязательно, но могут быть).

Сам поймешь когда-нить, что я был прав.

Hint:
$dat1=mktime(0,0,0,10,20,2003);
$dat2=mktime(0,0,0,4,5,2004);
Ась? Есть что возразить?

Про контакт: ну да вспомнил, где-то раз в неделю ломится ко мне в аську какой-нить ламер и спрашивает чего-нить. Я таких немедленно убиваю из листа и в игнор :) Мож я так же и к тебе попал? :)

Про совет: есть только два способа сделать что-либо: либо правильно, либо неправильно (т.е. никак). Причин сделать неправильно может найтись уйма, а вот причин сделать правильно может не найтись вовсе. Поэтому нельзя идти по лёкгому пути, нужно идти по правильному, т.к. легкий путь есть путь в никуда.

ЗЫ. Чего-то меня на филосовствование потянуло. Странно.
 
Сверху