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

Форум PHP

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

 

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

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

тема: почему mktime(0,0,0,1,1,1970) = -10800?
 
 автор: Zilog   (10.06.2009 в 16:43)   письмо автору
 
 

почему mktime(0,0,0,1,1,1970) = -10800?
откуда взялось отрицательное число? Разве не ноль должен вернуться?

date_default_timezone_get() - говорит, что временная зона Европа/Москва.

----
ну и заодно спрошу: как в unix timestamp заменить год, оставив дату на месте? (можно, например, добавить или отнять кол-во секунд за целый год, но как быть в этом случае с високосным годом?).

  Ответить  
 
 автор: Trianon   (10.06.2009 в 18:00)   письмо автору
 
   для: Zilog   (10.06.2009 в 16:43)
 

>почему mktime(0,0,0,1,1,1970) = -10800?
>откуда взялось отрицательное число? Разве не ноль должен вернуться?
>date_default_timezone_get() - говорит, что временная зона Европа/Москва.

Вот потому что Москва - поэтому и не ноль. -10800 это три часа разницы.
смотрите определение unix timestamp .

>ну и заодно спрошу: как в unix timestamp заменить год, оставив дату на месте? (можно, например, добавить или отнять кол-во секунд за целый год, но как быть в этом случае с високосным годом?).

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

  Ответить  
 
 автор: Zilog   (10.06.2009 в 22:49)   письмо автору
 
   для: Trianon   (10.06.2009 в 18:00)
 

Trianon, а в каких случаях вообще используется этот таймштам с его гемороями и ограничениями? Кому он такой сдался то?

  Ответить  
 
 автор: Trianon   (10.06.2009 в 23:00)   письмо автору
 
   для: Zilog   (10.06.2009 в 22:49)
 

У него нет никакого геморроя.
Таймштамп это линейное время в котором хорошо и удобно фиксировать абсолютные моменты и представлять интервалы. Внутри программы.
А к примеру ISO-строка (YYYY-MM-DD HH:MM:SS) - это вид представления времени, в котором те же моменты удобно показывать человеку.

Что касается ограничений, тут увы да...
Но они, полагаю, относительно скоро исчезнут. С переходом на 64битную архитектуру.

  Ответить  
 
 автор: nikita2206   (10.06.2009 в 23:28)   письмо автору
 
   для: Trianon   (10.06.2009 в 23:00)
 

мда на эту архитектуру уже лет двадцать переходят - переходят, да всё никак передут, к слову как и на HyperThreading…

  Ответить  
 
 автор: Zilog   (10.06.2009 в 23:44)   письмо автору
 
   для: Trianon   (10.06.2009 в 23:00)
 

Хорошо. Вот я храню в unix timestamp интервалы - мне интересны месяц/день. Интервалы эти сравниваются с интервалом, который вводит пользователь. На ваш взгляд я выбрал удачный формат для хранения? Или же лучше timestamp который в mysql (YYYY-MM-DD HH:MM:SS)?

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

  Ответить  
 
 автор: Trianon   (11.06.2009 в 00:04)   письмо автору
 
   для: Zilog   (10.06.2009 в 23:44)
 

timestamp который в MySQL хранится точно также - в виде числа секунд.
Это MySQL его преобразует перед тем, как поместить в поле записи, и после того, как извлечь оттуда.
Преобразует согласно той таймзоны, которая установлена на сервере MySQL по умолчанию.
Что вобщем-то может не совпадать с таймзоной пользователя ( как, впрочем, и заданная таймзона php)

Какие Вас подстерегают неприятности - сказать трудно. :)

  Ответить  
 
 автор: Zilog   (11.06.2009 в 00:36)   письмо автору
 
   для: Trianon   (11.06.2009 в 00:04)
 

>timestamp который в MySQL хранится точно также - в виде числа секунд.

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

>Преобразует согласно той таймзоны, которая установлена на сервере MySQL по умолчанию.
>Какие Вас подстерегают неприятности - сказать трудно. :)

Так вот это и настораживает. Я пока не совсем понял; как поведет себя код, окажись он на сервере в какой-нибудь Австралии. Конечно, такое развитие событий маловероятно - но знать надо бы.

  Ответить  
 
 автор: Trianon   (11.06.2009 в 00:54)   письмо автору
 
   для: Zilog   (11.06.2009 в 00:36)
 

А как сейчас ведет себя код, к которому обращаются одновременно из, допустим, Владивостока, Калининграда и Екатеринбурга, Вас не настораживает?

phpMyAdmin честно выдает то, что отдал ему сервер MySQL.
Сервер же уже всё переделал перед тем как отдать, так что PMA может с этим сделать?

  Ответить  
 
 автор: Zilog   (11.06.2009 в 01:28)   письмо автору
 
   для: Trianon   (11.06.2009 в 00:54)
 

phpMyAdmin честно выдает то, что отдал ему сервер MySQL.
Сервер же уже всё переделал перед тем как отдать, так что PMA может с этим сделать?

Ааа. Вспомнил,так в некоторых других языках время тоже в 32битном формате храниться, только, как помню, без привязки к "эпохам". А тут получается формат один, но mktime выдает с привязкой к гринвичу, а mysql - нет. Вроде так.

>А как сейчас ведет себя код, к которому обращаются одновременно из, допустим, Владивостока, Калининграда и Екатеринбурга, Вас не настораживает?

уу, запахло керосином. Вообще-то, пока не проверял. Неужели, это ТО самое? :)
Я мыслю пока так: если код работает у "меня" на серваке, то откуда бы к нему не обращались - проблем с датами unix timestamp возникнуть не должно. Или я не прав?

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

  Ответить  
 
 автор: Trianon   (11.06.2009 в 01:33)   письмо автору
 
   для: Zilog   (11.06.2009 в 01:28)
 

Что значит - у "меня" на серваке?

  Ответить  
 
 автор: Zilog   (11.06.2009 в 01:34)   письмо автору
 
   для: Trianon   (11.06.2009 в 01:33)
 

>Что значит - у "меня" на серваке?

у хостера, в мск. потому и в кавычках.

  Ответить  
 
 автор: Trianon   (11.06.2009 в 01:37)   письмо автору
 
   для: Zilog   (11.06.2009 в 01:34)
 

Какая разница, где Вы живете?
Вы работатете в Москве. Сайт работает. Всё в порядке.
Вы проводите отпуск (в Болгарии к примеру) .
Сайт что сам собой от ревности сломается?

  Ответить  
 
 автор: Zilog   (11.06.2009 в 01:54)   письмо автору
 
   для: Trianon   (11.06.2009 в 01:37)
 

>Какая разница, где Вы живете?
>Вы работатете в Москве. Сайт работает. Всё в порядке.
>Вы проводите отпуск (в Болгарии к примеру) .
>Сайт что сам собой от ревности сломается?

Да хрен поймешь его. Но по вашим словам - страхов при использовании unx-timestamp не должно быть.

Кстати, анекдот про болгарина и учительницу знаете?

  Ответить  
 
 автор: Trianon   (11.06.2009 в 02:02)   письмо автору
 
   для: Zilog   (11.06.2009 в 01:54)
 

>Да хрен поймешь его. Но по вашим словам - страхов при использовании unx-timestamp не должно быть.

Я этого не говорил. Я лишь сказал, что мне трудно судить, что именно у Вас может создать трудности.

>Кстати, анекдот про болгарина и учительницу знаете?
(кивнув головой)
Нет. Знаю только стишок, неприличный настолько, что цитировать здесь не рискну.

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

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