→

MySQL →  Письмо веб-разработчика о проблемах времени

Проблема уже исправлена и как оказалось была довольно интересная. Я выявил, что в intranet-е нельзя было сохранить лишь два месяца — апрель и ноябрь. Все остальные месяцы успешно работали и сохранялись. Довольно странная ситуация, правда? Ведь все месяцы обрабатываются
одинаково и нет какого-то условия именно для этих двух месяцев. Немного поразмыслив, мы с Пашей предположили, что это проблема существует из-за… перевода времени и неккоретных настроек MySQL базы; Поскольку мы в админке выбираем только год и месяц (без точного времени), я присваиваю 00:00:00 часов первого дня выбраного месяца и года, тоесть самое-самое начало.

(Для програмистов: mktime(0,0,0,$month,1,$year))
В случае перевода времени, идет сдвиг на час, и таким образом мы получаем уже 23:59:00 31-ое марта в случае выбора апреля…

(Для програмистов: получившийся mktime я сохраняю в базу как
FROM_UNIXTIME(mktime))

Это предварительный анализ,теперь факты, относительно этого:
1) Не работает только на тех месяцах, перед которыми изменяется время (если в марте переводят часы — то в апреле, если в октябре переводят часы — то в ноябре)
2) Обнаружена ошибка только при записи в/из базы, обработка функции FROM_UNIXTIME MYSQL
3) На нашем локальном сервере этот же скрипт успешно работает с любыми месяцами — следовательно проблема именно в настройках MySQL базы.

Для более точного исследования необходимо дополнительное время и более глубинно изучить эту проблему с переводом времени, скажу только что я с таким сталкиваюсь впервые, когда компьютер неверно определяет свою же дату (фактически наблюдается де-синхронизация PHP timestamp с MySQL timestamp)
3

JavaScript программирование →  Пишем счетчик "До нового года осталось"


<script language='javascript' type='text/javascript'>
function fulltime ()   {
var time=new Date();
var newYear=new Date("jan,01,2009,00:00:00"); // здесь вместо 2009 можно вставить php функию <?= date("Y") + 1?>
var totalRemains=(newYear.getTime()-time.getTime());

if (totalRemains>1){

var RemainsSec = (parseInt(totalRemains/1000));
var RemainsFullDays=(parseInt(RemainsSec/(24*60*60)));
var secInLastDay=RemainsSec-RemainsFullDays*24*3600;
var RemainsFullHours=(parseInt(secInLastDay/3600));
if (RemainsFullHours<10){RemainsFullHours="0"+RemainsFullHours};
var secInLastHour=secInLastDay-RemainsFullHours*3600;
var RemainsMinutes=(parseInt(secInLastHour/60));
if (RemainsMinutes<10){RemainsMinutes="0"+RemainsMinutes};
var lastSec=secInLastHour-RemainsMinutes*60;
if (lastSec<10){lastSec="0"+lastSec};

document.getElementById("RemainsFullDays").innerHTML=RemainsFullDays+"<span id='Rem'> дн</span>";
document.getElementById("RemainsFullHours").innerHTML=RemainsFullHours+"<span id='Rem'> час</span>";
document.getElementById("RemainsMinutes").innerHTML=RemainsMinutes+"<span id='Rem'> мин</span>";
document.getElementById("lastSec").innerHTML=lastSec+"<span id='Rem'> сек</span>"; <!-- highslide start  -->
setTimeout('fulltime()',10)  
}

else{
document.getElementById("clock").innerHTML="C НОВЫМ
ГОДОМ !!!";
}
}
</script>
<style type='text/css'>
#clou_xs {position:relative;width:180px;height:235px;background: url(http://s.php5.com.ua/images/php_snow_2008.gif) no-repeat; background-color: #9999CC; padding:10px}
#clock {width:175px;height:235px;text-align:right;color:#000099;font-size:13px;}
#RemainsFullDays {font-size:25px;color: #2C79BF;}
#RemainsFullHours {position:absolute;bottom:1px;left:40px;font-size:15px;color:#000099;}
#RemainsMinutes {position:absolute;bottom:1px;left:87px;font-size:15px;color:#000099;}
#lastSec {position:absolute;bottom:1px;left:135px;font-size:15px;color:#000099;}
#Rem {font-size:11px;font-weight:normal;color:#000099;}
</style>
<div id='clou_xs'>
<div id='clock'>до нового года
 осталось:

<span id='RemainsFullDays'></span>
  <span id='RemainsFullHours'></span>
  <span id='RemainsMinutes'></span>
  <span id='lastSec'></span>
</div>
</div>
<script language='javascript'>fulltime();</script>
 


В результате получаем: До нового года осталось.
0
1