Я пробовал дни, поэтому, наконец, я подумал, что должен спросить. Ниже я опубликую то, что у меня есть, любые прямые решения будут замечательными. Я постараюсь быть максимально подробным.Тип аукциона Обратный отсчет
Что мне нужно создать?
Обратный отсчет типа аукциона с взаимодействием с MySQL для извлечения конечного времени рассматриваемого предмета. Я также буду использовать Javascript для создания живой анимации обратного отсчета. Он должен использовать время сервера, а не время пользователя на своем компьютере, которое, похоже, не работает.
Типы файлов Используется
PHP, Javascript, MySQL
Особые примечания
Я должен также гарантировать, что время от сервера, а не на целевом компьютере. Если есть лучший способ сделать то, что я пытаюсь, дайте мне знать. Я провел много исследований и до сих пор не могу заставить это работать.
Имена файлов
index.php - Main File
db.php - Connection to DB - within "system" folder
functions.php - Contains all functions. - within "system" folder
DataBase информация
Table Name: time
Fields : id, name, end_time
Примечание по базе данных: "end_time" является TIMESTAMP
index.php
<?
// Calls the DB for Connection
include("system/db.php");
// Calls all Functions
include("system/functions.php");
?>
<!-- Loads the actual Countdown -->
<div id="countdowncontainer"></div>
<br />
<?
// This Part loads the "end_date" so the countdown can stop.
////////////////////////////////////////////////////////////
$id_num = "1";
$result = mysql_query("SELECT * FROM item WHERE id = '$id_num'");
while($row = mysql_fetch_array($result))
{
$end_time = $row['end_date']; // 2013-12-11 00:00:00
$end_time = $end_time ;
}
?>
<!-- The script below loads the data from the server in this format :
2013-12-11 00:00:00 -->
<script type="text/javascript">
var futuredate=new cdtime("countdowncontainer", "<? echo $end_time; ?>")
futuredate.displaycountdown("days", formatresults)
</script>
Следующий файл является файлом функции. Здесь я предполагаю, что мне нужно изменить или сделать что-то, чтобы оно могло загружать время сервера, а не местное время.
functions.php
<script type="text/javascript">
function cdtime(container, targetdate) {
if (!document.getElementById || !document.getElementById(container)) return
this.container = document.getElementById(container)
this.currentTime = new Date()
this.targetdate = new Date(targetdate)
this.timesup = false
this.updateTime()
}
cdtime.prototype.updateTime = function() {
var thisobj = this
this.currentTime.setSeconds(this.currentTime.getSeconds() + 1)
setTimeout(function() {
thisobj.updateTime()
}, 1000) //update time every second
}
cdtime.prototype.displaycountdown = function (baseunit, functionref) {
this.baseunit = baseunit
this.formatresults = functionref
this.showresults()
}
cdtime.prototype.showresults = function() {
var thisobj = this
var timediff = (this.targetdate - this.currentTime)/1000 //difference btw target date and current date, in seconds
if (timediff < 0) { //if time is up
this.timesup = true
this.container.innerHTML = this.formatresults()
return
}
var oneMinute = 60 //minute unit in seconds
var oneHour = 60 * 60 //hour unit in seconds
var oneDay = 60 * 60 * 24 //day unit in seconds
var dayfield = Math.floor(timediff/oneDay)
var hourfield = Math.floor((timediff - dayfield * oneDay)/oneHour)
var minutefield = Math.floor((timediff - dayfield * oneDay - hourfield * oneHour)/oneMinute)
var secondfield = Math.floor((timediff - dayfield * oneDay - hourfield * oneHour - minutefield * oneMinute))
if (this.baseunit == "hours") { //if base unit is hours, set "hourfield" to be topmost level
hourfield = dayfield * 24 + hourfield
dayfield = "n/a"
} else if (this.baseunit == "minutes") { //if base unit is minutes, set "minutefield" to be topmost level
minutefield = dayfield * 24 * 60 + hourfield * 60 + minutefield
dayfield = hourfield = "n/a"
} else if (this.baseunit == "seconds") { //if base unit is seconds, set "secondfield" to be topmost level
var secondfield = timediff
dayfield = hourfield = minutefield = "n/a"
}
this.container.innerHTML = this.formatresults(dayfield, hourfield, minutefield, secondfield)
setTimeout(function() {
thisobj.showresults()
}, 1000) //update results every second
}
function formatresults() {
if (this.timesup == false) { //if target date/time not yet met
var displaystring = arguments[0] + " days " + arguments[1] + " hours " + arguments[2] + " minutes " + arguments[3] + " seconds <b>left until Target Date </b>"
} else { //else if target date/time met
var displaystring = "<? $test2 = "
Test Is a Success ";?><b><? echo $test2; ?></b>"
}
return displaystring
}
</script>
Теперь это работает отлично до точки. Однако, если я изменю свое местное время, я могу обмануть его, а не время сервера, так как это не может быть изменено.
Что мне не хватает?
'this.currentTime = new Date()' использовать локальную дату, потому что она выполняется на стороне клиента. Вы должны получить текущую временную метку в PHP и передать ее функции 'cdtime': тогда локальная дата никогда не будет использоваться. ** РЕДАКТИРОВАТЬ **: Почему в вашем коде нет ';'? – OlivierH
Возможно, было бы лучше получить, как долго (в секундах) осталось до отсчета времени, а затем передайте это на Javascript и установите время, основанное на том, как долго осталось. Это делает его локальным для пользователя и имеет больше смысла. – Nunners
Извините, вы потеряли меня в mysql_ – vascowhite