Создание времени в ПХП

php_testik

Guest
Создание времени в ПХП

Здраствуйте.
Спасибо что зашли, надеюсь что именно Вы сможете мне помоч.

Вот встала пердомной такая задача, надо создать в игре свой мир. Всё бы хорошо но игра происходит в начале 1900 года. а все временный функции в пхп с 1.01.1970, поэтому решил сделать на этой базе своё временное решение.


1. я Взял и запихал в мускул время через time(); - это время символизирует кол-во секунтд когда был запущенна игра.

2. написал функцию которая берёт time(); и сравнивает с кол-вом времени в мускуле, полученный результат умнажает на 5 (т.к. время в игре идёт в 5 раз быстрее реального), делит и я получаю прошедшие минуты, часы, секунды....

вопрос в следующем, как сделать так чтобы ещё можно было выводить день, год, месяц и день недели?

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

желательно всё сделать так чтобы написать функцию и как и в пхп
vremja ("D.M.Y", $sek); \\ день. меесяц.год в зависимости от
$sek прошедших с начала игры... Заранее благодарен!
 

Фанат

oncle terrible
Команда форума
какая проблема работать с текущим временем, а при выводе года просто отнимать от него 105?
И ВСЕ
 

Nirva

Dmitry Polyakov
или я тебя не понял, или что тебе мешает пользоваться от 2000го в формате 00. конечно, недели и дни путаются, но все-таки время сохранено.
в крайнем случае найди соответсвие (12 лет вроде) с началом 1900го во времени unix.
 

php_testik

Guest
Originally posted by Фанат
какая проблема работать с текущим временем, а при выводе года просто отнимать от него 105?
И ВСЕ
Проблемма в том что в игре время идёт в несколько раз быстрее реального (в 5 раз). Но очень важны дни понидельник, вторни .... ......

-~{}~ 28.01.05 11:24:

Originally posted by Nirva
или я тебя не понял, или что тебе мешает пользоваться от 2000го в формате 00. конечно, недели и дни путаются, но все-таки время сохранено.
в крайнем случае найди соответсвие (12 лет вроде) с началом 1900го во времени unix.
Время в игре идёт быстрее реального...
 

Фанат

oncle terrible
Команда форума
шо меня прикалывает - это такие вот задаватели вопросов.

скажи, ты больше ничего в рукаве не припрятал? чтобы после того, как тебе ответили, сказать "а у меня вот еще тут... время в обратную сторону идет"?

2. написал функцию которая берёт time(); и сравнивает с кол-вом времени в мускуле, полученный результат делит и я получаю прошедшие минуты, часы, секунды....
С какой стати ты делишь, если оно у тебя быстрее идет?
Умножать надо.

а умножив - пользоватьсяо бычнной date
только при выводе года вычитать разницу
 

php_testik

Guest
Originally posted by Фанат
шо меня прикалывает - это такие вот задаватели вопросов.

скажи, ты больше ничего в рукаве не припрятал? чтобы после того, как тебе ответили, сказать "а у меня вот еще тут... время в обратную сторону идет"?


С какой стати ты делишь, если оно у тебя быстрее идет?
Умножать надо.

а умножив - пользоватьсяо бычнной date
только при выводе года вычитать разницу
Ладно, извеняюсь, что не упоменнул об этом!
Да результат вычеслений я умножаю на 5. и получаю кол-во секунд прошедшие от старта времени ....

Но вопрос в том как это кол-во грамотно обработать...
 

php_testik

Guest
Originally posted by Фанат
вывести, как есть, только от года отнять 70
да но время идёт в игре быстрее, за 1 нашу секунду там проходит их 5!
соответственно если я зашёл в игру то спустя 20 лет, в игре должно пробежать 100! соответственно просто отнять этого не достаточно!
 

XStudent

Новичок
Если не важно соответствие реальных дат и дней недели, тогда проше использовать 2000 год вместно 1900, и при выводе отнимать 100, тогда получается так:
Получаешь текущее время в секундах, вычитаешь время из базы в секундах = прошло секунд. Множишь на 5, прибавляешь время в сек с 1970 до 2000 года, получаешь время в сек в будущем, Преобразуешь дату, вычитаешь из года 100. Вроде все.
 

XStudent

Новичок
Это точно, вероятнее даже попробовать написать что-нить. А если соответствие дат необходимо, тогда либо писать свою функцию с учетом високосных лет, часов, кратности 100, кратности 400. Или воспользоваться готовыми библиотеками.
 

php_testik

Guest
Всем Спасибо!
Всё оказалось проще....
берём

$datka=gmdate("j.M.Y:H.i.s l", $sek);

где $sek = время в секундах от 1970 года (-14462) +((разницу между настоящим кол-вом сек и стартовой датой ) * 5).

получаем $sek=-14462 + прошедшее время по игре

И получаем красиво дату время и всё остальное.


А я тут голову двое суток морочу, только из - за того что не попробывал время со знаком минус.... Удачи и ещё раз Спасибо!
 

XStudent

Новичок
Странно.... У меня не работает (и не должно, по моему)
<b>Windows does not support dates prior to midnight (00:00:00), January 1, 1970</b>
 

php_testik

Guest
Originally posted by XStudent
Странно.... У меня не работает (и не должно, по моему)
<b>Windows does not support dates prior to midnight (00:00:00), January 1, 1970</b>
да ты парв! я обрадовался раньше времени, т.к. в линуксе такой ошибки не показывает!

Но всерогно я справился если интрересно то вот нашёл модуль, высчитал секунды знаного -2208999600 и дальше всё как и описывал

http://phplens.com/phpeverywhere/adodb_date_library
 

Кром

Новичок
Вообще, если дата храниться в mySQL, то можно просто использовать тип datetime, прибавляя к нему количество секунда прошедших с начала игры.
Функция будет состоять из одно запроса к базе.
 

php_testik

Guest
Originally posted by Кром
Вообще, если дата храниться в mySQL, то можно просто использовать тип datetime, прибавляя к нему количество секунда прошедших с начала игры.
Функция будет состоять из одно запроса к базе.
по подробнее можно?! а то у меня библиотека весит 10 кб одного кода.
а это сильно скажеться на трафике.... при 200 человек в онлайне + каждый раз загрузка модуля... :-( эт не есть хорошо! А если можно решить одним запросом через мускул то просто суппер! токо я не представляю как...
 

Кром

Новичок
Да тут все просто.
Вот тип:
http://dev.mysql.com/doc/mysql/ru/datetime.html
Поддерживается диапазон величин от '1000-01-01 00:00:00' до '9999-12-31 23:59:59'.

Вот функции:
http://dev.mysql.com/doc/mysql/ru/date-and-time-functions.html

Пишешь в базу основную дату '1900-01-01 00:00:00'. При запросе к этой дате прибавляешь секунды прошедшие с начала игры, умножая их на необходимый коэффицент.
И выводишь полученную дату в нужном формате.
 

Astral Man

We Will Rock You
Автор оригинала: php_testik
... у меня библиотека весит 10 кб одного кода.
а это сильно скажеться на трафике.... при 200 человек
Твоя библиотека работает на стороне сервера, клиент ее не получает, он получает только результат работы скрипта.
Как работает РНР, где он выполняется?
 
Сверху