Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   разница секунд в Unix (https://javascript.ru/forum/misc/49584-raznica-sekund-v-unix.html)

dasser 19.08.2014 20:35

разница секунд в Unix
 
Добрый вечер!
делаю небольшой секундомер с рассчетом разницы секунд текущего времени и заданой датой в Unix-формате.

<?php
$ltime = date (Y,n,d,H,i,s, 1408370664);
?>
<script type="text/javascript">
var clock;
$(document).ready(function() {
var currentDate = new Date(); // var currentDate = new Date();
var pastDate  = new Date("<? echo $ltime ?>"); 
var diff = currentDate.getTime() / 1000 - pastDate.getTime() / 1000;
clock = $('.clock').FlipClock(diff, {
clockFace: 'DailyCounter'
});
});
</script>

что я делаю не так ?

ixth 19.08.2014 21:39

Не обязательно форматировать дату, достаточно передать timestamp:

<?php
// js timestamp — в миллисекундах, PHP — в секундах.
$ltime = 1408370664 * 1000;
?>
<script type="text/javascript">
	$(document).ready(function() {
		var currentDate = new Date();
		var pastDate = new Date("<? echo $ltime ?>"); 
// Невалидная дата при приведении к числу отдает NaN
		if (!isNaN(pastDate)) {
			var diff = currentDate - pastDate;
			window.clock = $('.clock').FlipClock(diff, { clockFace: 'DailyCounter' });
		}
	});
</script>

dasser 20.08.2014 01:05

ixth,
все привел к примеру, но выдает ошибку фун-ции в 10 стр, именно на "!". может допскрипт (compiled/flipclock.js) его корявит, переделываю с flipclockjs . com

ixth 20.08.2014 10:22

Цитата:

Сообщение от Rise (Сообщение 326585)
dasser, а вы в курсе что дата клиента может сильно отличаться от даты сервера как в плюс так и в минус в связи с наличием временных зон? Вы уж тогда и текущую дату берите с сервера, а не с клиента:

Timestamp у дат с разными таймзонами одинаковый.

ixth 20.08.2014 10:59

Но если я сменю часовой пояс, timestamp не изменится.

ixth 20.08.2014 11:02

var utc = new Date('Wed Aug 20 2014 12:00:00 UTC').getTime();
var msk = new Date('Wed Aug 20 2014 16:00:00 GMT+0400 (MSK)').getTime();
alert(utc + '\n' + msk);

dasser 20.08.2014 12:32

Rise,
Цитата:

Сообщение от Rise
dasser, а вы в курсе что дата клиента может сильно отличаться от даты сервера как в плюс так и в минус в связи с наличием временных зон? Вы уж тогда и текущую дату берите с сервера, а не с клиента:

этот вариант не работает.
проблема скорее всего из-за NaN.
<?
$ltime = 1408370664 * 1000; 
>  
<script type="text/javascript">
var clock;
$(document).ready(function() {
var currentDate = new Date(); 
var pastDate  = new Date("<? echo $ltime ?>"); 
var diff = currentDate.getTime() / 1000 - pastDate.getTime() / 1000;
clock = $('.clock').FlipClock(diff, {
clockFace: 'DailyCounter'
});
alert(diff + '\n' + pastDate + '\n' + currentDate + '\n' );
});
</script>

Если ставить в 8 строку Unix в милисекундах - работает, но заданое время должно браться из переменной посредством php (как в примере выше, но он не работатет). Танец с бубном
Цитата:

Сообщение от ixth
// Невалидная дата при приведении к числу отдает NaN

if (!isNaN(pastDate)) {
var diff = currentDate - pastDate;
window.clock = $('.clock').FlipClock(diff, { clockFace: 'DailyCounter' });
}

не дает еффекта, возможно из-за синтаксиса (ИМХО)

ixth 20.08.2014 13:19

Убери кавычки вокруг ltime. Date пытается парсить строку, а не timestamp.

dasser 20.08.2014 13:48

ixth,
Цитата:

Сообщение от ixth
Убери кавычки вокруг ltime. Date пытается парсить строку, а не timestamp.

не работает даже alert

dasser 20.08.2014 14:31

Rise,
суть в том что переменная посредством php береться из БД, а в БД естественно она в unix, так как этот формат исплользуэться в осоновном обработчике. Проблема в том что я JS не знаю, пытаюсь учиться, перепиливая готовые решения.


Часовой пояс GMT +3, время: 04:31.