I have a script that allows me to automatically generate slots on a calendar according to the different opening hours of my users.
Today, I would like to improve the execution of my script to make it much faster than today (it takes a few seconds to make the calendar appear).
You have to know that I have a table OPENING_TIMES which contains 7 rows (1 per day) for each user.
I tried some improvements but without success (with joins for example).
Do you have any ideas?
Thanks in advance !
$Sch_Link_User = $_GET['psy'];
$Data_query = mysqli_query($_Db_Con, 'SELECT ID_UNIQUE, CONSULTATION_TIME, CONSULTATION_TIME_BEFORE, TIMEZONE FROM USERS WHERE PROFILE_URL LIKE "' . $Sch_Link_User . '"');
$Data = mysqli_fetch_assoc($Data_query);
$Sch_Id_User = $Data['ID_UNIQUE'];
$Difference = '0';
switch ($Data['CONSULTATION_TIME']) {
case 1:
$Sch_Time_Consultation = 30;
break;
case 2:
$Sch_Time_Consultation = 45;
break;
case 3:
$Sch_Time_Consultation = 60;
break;
default:
$Sch_Time_Consultation = 60;
}
$Calendar = array();
$weekslots = array_map(function($dow) {return array('dow' => $dow, 'hour' => 00);}, range(0, 6));
$date = time();
$end_date = $date + (6 * 7 * 24 * 60 * 60);
$open_hours_cache = array();
while($date <= $end_date) {
$date_dow = date('w', $date);
foreach($weekslots as $timeslot) {
if($date_dow == $timeslot['dow']) {
$timeofday = $date + (3600 * $timeslot['hour']);
for($nd = 1; $nd <= 7; $nd++) {
if(date('N', $timeofday) == $nd) {
if (!isset($open_hours_cache[$nd])) {
$Data_Openhours_query = mysqli_query($_Db_Con, 'SELECT START_HOUR_M, END_HOUR_M, START_HOUR_A, END_HOUR_A FROM OPENING_TIMES WHERE ID_USER = "' . $Sch_Id_User . '" AND WEEKDAY = "' . $nd . '" AND CLOSED = 0');
$open_hours_cache[$nd] = mysqli_fetch_assoc($Data_Openhours_query);
}
$Data_Openhours = $open_hours_cache[$nd];
if(isset($Data_Openhours['START_HOUR_M']) && $Data_Openhours['END_HOUR_M'] == NULL && $Data_Openhours['START_HOUR_A'] == NULL && isset($Data_Openhours['END_HOUR_A'])) {
$shm = strtotime($Data_Openhours['START_HOUR_M'] . $Difference . ' hour');
$eha = strtotime($Data_Openhours['END_HOUR_A'] . $Difference . ' hour');
$timeslots = array();
$interval = new DateInterval("PT{$Sch_Time_Consultation}M");
$timeRange = new DatePeriod(new DateTime(date('Y-m-d H:i', $shm)), $interval, new DateTime(date('Y-m-d H:i', $eha)));
foreach ($timeRange as $time) {
$timeslots[] = $time->format("H:i");
}
foreach ($timeslots as $slot) {
$datefinal = date('Y-m-d', $timeofday) . ' ' . $slot . ':00';
$timestamp = strtotime($datefinal . $Difference . ' hour');
$Check_Slot = mysqli_query($_Db_Con, 'SELECT ID, ID_USER, STATUS FROM APPOINTMENTS WHERE ID_USER = "' . $Sch_Id_User . '" AND DATE_START = "' . $timestamp . '" AND (STATUS = 1 OR STATUS = 2 OR STATUS = 9 OR STATUS = 10) AND DATE_START > "' . $Time . '"');
$Data_Slot = mysqli_fetch_assoc($Check_Slot);
$status = isset($Data_Slot['STATUS']) && $Data_Slot['STATUS'] == 9 && $Data_Slot['ID_USER'] == $_SESSION['uid'];
$check_slot = mysqli_num_rows($Check_Slot) == 0;
$time_before = ($Time + (60 * 60 * $Data['CONSULTATION_TIME_BEFORE'])) < $timestamp;
if ($status) {
$class = 'blocked';
} elseif ($check_slot && $time_before) {
$class = 'available';
} else {
$class = 'unavailable';
}
$Calendar[] = array(
'id' => date('Y-m-d', $timeofday) . '/' . $slot,
'title' => $slot,
'class' => $class,
'psy' => $Sch_Id_User,
'start' => $timestamp . '000',
);
}
} else if(isset($Data_Openhours['START_HOUR_M']) && isset($Data_Openhours['END_HOUR_M']) && isset($Data_Openhours['START_HOUR_A']) && isset($Data_Openhours['END_HOUR_A'])) {
$shm = strtotime($Data_Openhours['START_HOUR_M'] . $Difference . ' hour');
$ehm = strtotime($Data_Openhours['END_HOUR_M'] . $Difference . ' hour');
$sha = strtotime($Data_Openhours['START_HOUR_A'] . $Difference . ' hour');
$eha = strtotime($Data_Openhours['END_HOUR_A'] . $Difference . ' hour');
$timeslots = array();
$interval = new DateInterval("PT{$Sch_Time_Consultation}M");
$timeRange = new DatePeriod(new DateTime(date('Y-m-d H:i', $shm)), $interval, new DateTime(date('Y-m-d H:i', $ehm)));
foreach ($timeRange as $time) {
$timeslots[] = $time->format("H:i");
}
$timeRange = new DatePeriod(new DateTime(date('Y-m-d H:i', $sha)), $interval, new DateTime(date('Y-m-d H:i', $eha)));
foreach ($timeRange as $time) {
$timeslots[] = $time->format("H:i");
}
foreach ($timeslots as $slot) {
$datefinal = date('Y-m-d', $timeofday) . ' ' . $slot . ':00';
$Check_Slot = mysqli_query($_Db_Con, 'SELECT ID, ID_USER, STATUS FROM APPOINTMENTS WHERE ID_USER = "' . $Sch_Id_User . '" AND DATE_START = "' . strtotime($datefinal) . '" AND (STATUS = 1 OR STATUS = 2 OR STATUS = 9 OR STATUS = 10) AND DATE_START > "' . $Time . '"');
$Data_Slot = mysqli_fetch_assoc($Check_Slot);
// * 24 le temps avant possibilité de prende rendez-vous
$status = isset($Data_Slot['STATUS']) && $Data_Slot['STATUS'] == 9 && $Data_Slot['ID_USER'] == $_SESSION['uid'];
$check_slot = mysqli_num_rows($Check_Slot) == 0;
$time_before = ($Time + (60 * 60 * $Data['CONSULTATION_TIME_BEFORE'])) < strtotime($datefinal . $Difference . ' hour');
if ($status) {
$class = 'blocked';
} elseif ($check_slot && $time_before) {
$class = 'available';
} else {
$class = 'unavailable';
}
$Calendar[] = array(
'id' => date('Y-m-d', $timeofday) . '/' . $slot,
'title' => $slot,
'class' => $class,
'psy' => $Sch_Id_User,
'start' => strtotime($datefinal . $Difference . ' hour') . '000',
);
}
}
}
}
}
}
$date += 86400;
}
$Calendar_Data = array(
'success' => 1,
'result' => $Calendar);
echo json_encode($Calendar_Data);
So I try to have a much faster loading with joins or a cache system to limit the number of requests.
Moreover, wouldn't it be more efficient if I also put everything in one column of my user table, the schedules?
I want to generate an automatic student registration number composed of "ID N0.","INTAKE"
and the current year, each time a student is recorded.
EX: KIAC 0013/INTAKE 4/2019.
But the problem is that the intake value which is 4 only increments once and i want it to increment each time a new intake starts.
I wasn't able to increment the intake value
as a new intake starts,in march and in september. so this means that students
for the september intake will be having "KIAC 0013/INTAKE 4/2019" as registration number
and those of march 2020 "KIAC 0013/INTAKE 5/2020" again
september 2020 "KIAC 0013/INTAKE 6/2020" and so on... but the intake value would still be 5 for september 2020 also.. this means it increments no more, the code below is a sample code and it doesn't insert into the database i was just testing for the result..
<?php
$k = "KIAC";
$id = "0013/INTAKE";
$month = date("m");
$year = date("Y");
if($month == '3'){
$intake = 3;
$intake++;
echo $k . " " . $id . " " . $intake. "/". $year;
}
else if($month == '9'){
$intake = 3;
$intake++;
echo $k . " " . $id . " " . $intake. "/". $year;
}
else{
$intake = 3;
echo $k . " " . $id . " " . $intake. "/". $year;
}
?>
I expected the output to be "KIAC 0013/INTAKE 4/2019." and the intake value
would change as a new intake starts.
I'm not sure if i understod your question, but maybe you could do something like this:
$k = "KIAC";
$id = "0013/INTAKE";
$month = date("m");
$year = date("Y");
$base_year = 2019; // Set a base when the intakes started
$intake = intval($year) - $base_year; // This will increase for every year
$increase_with = $intake++;
if($month == '3'){
$intake += $increase_with;
echo $k . " " . $id . " " . $intake. "/". $year;
}
else if($month == '9'){
$increase_with++;
$intake += $increase_with;
echo $k . " " . $id . " " . $intake. "/". $year;
}
Edited to make intake number unique.
You have to write condition in IF so between march to august it will increase 1 and after September intake it will increase with 2.
<?php
$k = "KIAC";
$id = "0013/INTAKE";
$month = date("m");
$year = date("Y");
$base_year = 2016;
$intake = intval($year) - $base_year;
if ($month == 3) {
$intake += 1;
echo $k . " " . $id . " " . $intake . "/" . $year;
} else if($month == 9) {
$intake += 2;
echo $k . "enter code here " . $id . " " . $intake . "/" . $year;
}else{
echo $k . " " . $id . " " . $intake. "/". $year;
}
?>
I have a little code just to know when a message was sent:
function time_ago ($respuestas) {
$date = $respuestas;
$today_date = getdate();
$months = ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio','julio','agosto','septiembre','octubre','noviembre','diciembre'];
$minute = $today_date['minutes'];
$hour = $today_date['hours'];
$day = $today_date['mday'];
$month = $today_date['mon'];
if ($today_date['hours'] <= 9) {
$hour = "0" . $today_date['hours'];
}
if ($today_date['minutes'] <= 9) {
$minute = "0" . $today_date['minutes'];
}
if ($today_date['mon'] <= 9) {
$month = "0" . $today_date['mon'];
}
if ($today_date['mday'] <= 9) {
$day = "0" . $today_date['mday'];
}
$actual_total_date = $today_date['year'] . "-" . $month . "-" . $day . " " . $hour . ":" . $minute;
$actual_total_date = new DateTime($actual_total_date);
//data of the date of the post
$post_date = substr($date,0,16);
$post_date = new DateTime($post_date);
$post_year = substr($date,0,4);
$post_month = substr($date,5,2);
$post_day = substr($date,8,2);
$post_hour = substr($date,11,2);
$post_minute = substr($date,14,2);
$interval = date_diff($post_date, $actual_total_date);
$invertal_days = substr($interval->format('%R%a'),1,strlen($interval->format('%R%a')));
$invertal_hours = $interval->format('%H');
$invertal_minutes = $interval->format('%I');
$result = "";
if ($invertal_days == 0 AND $invertal_hours == 0 AND $invertal_minutes < 1) {
$result = "Now";
} else if ($invertal_days == 0 AND $invertal_hours == 0 AND $invertal_minutes == 1) {
$result = substr($invertal_minutes,1,2) . " minute ago";
} else if ($invertal_days == 0 AND $invertal_hours == 0 AND $invertal_minutes < 10 AND $invertal_minutes > 1) {
$result = substr($invertal_minutes,1,2) . " minutes ago";
} else if ($invertal_days == 0 AND $invertal_hours == 0 AND $invertal_minutes < 60 AND $invertal_minutes >= 10) {
$result = $invertal_minutes . " minutes ago";
} else if ($invertal_days == 0 AND $post_day == $day) {
$result = "Today at " . $post_hour . ":" . $post_minute ;
} else if ($invertal_days == 0 AND $post_day == $day-1) {
$result = "Yesterday at " . $post_hour . ":" . $post_minute;
} else if ($invertal_days == 1 AND $post_day == $day-1) {
$result = "Yesterday at " . $post_hour . ":" . $post_minute;
} else {
$result = $post_day . " " . $months[$post_month-1] . " " . $post_year . " " . $post_hour . ":" . $post_minute;
}
return $result;
The problem I'm having only happens in production, not in local, and after doing some research I don't know what is happening. What happens is that this function gives me two different outputs with the same input. For example with the date: 2017-07-09 20:52:39, at the time I'm sending this post, it should enter the fourth conditional, because the minutes interval is between 10 and 60 minutes.
I could share to the site where I'm having problems if needed. I have already tested the data I am using for the function and it is correct.
<?php
for ($i= 1; $i <= 12; $i++) {
if ( $i <= 9) {
$month = '0' . $i;
} else {
$month = $i;
}
$date = date("d");
$year = date("Y");
//$month = date('Y-m-d', strtotime(date('Y').'-'.$i.'-'.date('d')));
$month = date('Y-m-d', strtotime($date."-" . $i ."-". $year));
$where = array('created_time >=' => $month . " 00:00:00", 'created_time <=' => $month . " 23:59:59");
$i_result[$month] = count($this->db->where($where)->get('tbl_opportunities')->result());
} var_dump( $i_result);
?>
I am trying to generate month recap charts. It is giving me the correct result for today's stats, but for the next days the stats refresh and give the new stats. But I would like to have a cumulative of total result for that particular month (monthly basic). Any suggestions?..
Refer to the image - just the blue bar:
manage to solve the problem...Tq
by replace this line
$where = array('created_time >=' => $month . " 00:00:00", 'created_time <=' => $month . " 23:59:59");
to
$where = array('created_time >=' => $year . "-" . '0' . $i . '-' . '01', 'created_time <=' => $year . "-" . '0' . $i . '-' . '31');
i have a website with appointments and i use this booking script http://www.planetphp.co.uk/free-php-booking-slots-calendar/.
Unfortunately, i have tried everything to change the language when it shows the month.
class booking_diary {
// Mysqli connection
function __construct($link) {
$this->link = $link;
}
// Settings you can change:
// Time Related Variables
public $booking_start_time = "09:00"; // The time of the first slot in 24 hour H:M format
public $booking_end_time = "21:00"; // The time of the last slot in 24 hour H:M format
public $booking_frequency = 30; // The slot frequency per hour, expressed in minutes.
// Day Related Variables
public $day_format = 3; // Day format of the table header. Possible values (1, 2, 3)
// 1 = Show First digit, eg: "M"
// 2 = Show First 3 letters, eg: "Mon"
// 3 = Full Day, eg: "Monday"
public $day_closed = array("Saturday", "Sunday"); // If you don't want any 'closed' days, remove the day so it becomes: = array();
public $day_closed_text = "CLOSED"; // If you don't want any any 'closed' remove the text so it becomes: = "";
// Cost Related Variables
public $cost_per_slot = 20.50; // The cost per slot
public $cost_currency_tag = "€"; // The currency tag in HTML such as € £ ¥
// DO NOT EDIT BELOW THIS LINE
public $day_order = array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");
public $day, $month, $year, $selected_date, $back, $back_month, $back_year, $forward, $forward_month, $forward_year, $bookings, $count, $days, $is_slot_booked_today;
/*========================================================================================================================================================*/
function make_calendar($selected_date, $back, $forward, $day, $month, $year,$first_name) {
// $day, $month and $year are the $_GET variables in the URL
$this->day = $day;
$this->month = $month;
$this->year = $year;
$this->first_name = $first_name;
$this->last_name = $last_name;
$this->telephone = $telephone;
$this->email = $email;
$this->page_id = $page_id;
$this->user_id = $user_id;
$this->uid = $uid;
$this->pon = $owner;
$this->rsvnumb = $rsvnumb;
// $back and $forward are Unix Timestamps of the previous / next month, used to give the back arrow the correct month and year
$this->selected_date = $selected_date;
$this->back = $back;
$this->back_month = date("m", $back);
$this->back_year = date("Y", $back); // Minus one month back arrow
$this->forward = $forward;
$this->forward_month = date("m", $forward);
$this->forward_year = date("Y", $forward); // Add one month forward arrow
// Make the booking array
$this->make_booking_array($year, $month);
}
function make_booking_array($year, $month, $j = 0) {
$stmt = $this->link->prepare("SELECT name, date, start FROM bookings WHERE date LIKE CONCAT(?, '-', ?, '%') and page_id=".$_GET['page_id']."");
$this->is_slot_booked_today = 0; // Defaults to 0
$stmt->bind_param('ss', $year, $month);
$stmt->bind_result($name, $date, $start);
$stmt->execute();
$stmt->store_result();
while($stmt->fetch()) {
$this->bookings_per_day[$date][] = $start;
$this->bookings[] = array(
"name" => $name,
"date" => $date,
"start" => $start
);
// Used by the 'booking_form' function later to check whether there are any booked slots on the selected day
if($date == $this->year . '-' . $this->month . '-' . $this->day) {
$this->is_slot_booked_today = 1;
}
}
// Calculate how many slots there are per day
$this->slots_per_day = 0;
for($i = strtotime($this->booking_start_time); $i<= strtotime($this->booking_end_time); $i = $i + $this->booking_frequency * 60) {
$this->slots_per_day ++;
}
$stmt->close();
$this->make_days_array($year, $month);
} // Close function
function make_days_array($year, $month) {
// Calculate the number of days in the selected month
$num_days_month = cal_days_in_month(CAL_GREGORIAN, $month, $year);
// Make $this->days array containing the Day Number and Day Number in the selected month
for ($i = 1; $i <= $num_days_month; $i++) {
// Work out the Day Name ( Monday, Tuesday... ) from the $month and $year variables
$d = (mktime(0, 0, 0, $month, $i, $year));
// Create the array
$this->days[] = array("daynumber" => $i, "dayname" => date("l", $d));
}
/*
Sample output of the $this->days array:
[0] => Array
(
[daynumber] => 1
[dayname] => Monday
)
[1] => Array
(
[daynumber] => 2
[dayname] => Tuesday
)
*/
$this->make_blank_start($year, $month);
$this->make_blank_end($year, $month);
} // Close function
function make_blank_start($year, $month) {
/*
Calendar months start on different days
Therefore there are often blank 'unavailable' days at the beginning of the month which are showed as a grey block
The code below creates the blank days at the beginning of the month
*/
// Get first record of the days array which will be the First Day in the month ( eg Wednesday )
$first_day = $this->days[0]['dayname']; $s = 0;
// Loop through $day_order array ( Monday, Tuesday ... )
foreach($this->day_order as $i => $r) {
// Compare the $first_day to the Day Order
if($first_day == $r && $s == 0) {
$s = 1; // Set flag to 1 stop further processing
} elseif($s == 0) {
$blank = array(
"daynumber" => 'blank',
"dayname" => 'blank'
);
// Prepend elements to the beginning of the $day array
array_unshift($this->days, $blank);
}
} // Close foreach
} // Close function
function make_blank_end($year, $month) {
/*
Calendar months start on different days
Therefore there are often blank 'unavailable' days at the end of the month which are showed as a grey block
The code below creates the blank days at the end of the month
*/
// Add blank elements to end of array if required.
$pad_end = 7 - (count($this->days) % 7);
if ($pad_end < 7) {
$blank = array(
"daynumber" => 'blank',
"dayname" => 'blank'
);
for ($i = 1; $i <= $pad_end; $i++) {
array_push($this->days, $blank);
}
} // Close if
$this->calendar_top();
} // Close function
function calendar_top() {
// This function creates the top of the table containg the date and the forward and back arrows
echo "
<div id='lhs'><div id='outer_calendar'>
<table border='0' cellpadding='0' cellspacing='0' id='calendar'>
<tr id='week'>
<td align='left'><a href='?month=" . date("m", $this->back) . "&first_name=" . $_GET['first_name'] . "&email=" . $_GET['email'] . "&last_name=" . $_GET['last_name'] . "&telephone=" . $_GET['telephone'] . "&user_id=" . $_GET['user_id'] . "&uid=" . $_GET['uid'] . "&rsvnumb=" . $_GET['rsvnumb'] . "&pon=" . $_GET['pon'] . "&page_id=" . $_GET['page_id'] . "&year=" . date("Y", $this->back) . "'>«</a></td>
<td colspan='5' id='center_date'>" . date("F, Y", $this->selected_date) . "</td>
<td align='right'><a href='?month=" . date("m", $this->forward) . "&first_name=" . $_GET['first_name'] . "&email=" . $_GET['email'] . "&last_name=" . $_GET['last_name'] . "&telephone=" . $_GET['telephone'] . "&user_id=" . $_GET['user_id'] . "&uid=" . $_GET['uid'] . "&rsvnumb=" . $_GET['rsvnumb'] . "&pon=" . $_GET['pon'] . "&page_id=" . $_GET['page_id'] . "&year=" . date("Y", $this->forward) . "'>»</a></td>
</tr>
<tr>";
/*
Make the table header with the appropriate day of the week using the $day_format variable as user defined above
Definition:
1: Show First digit, eg: "M"
2: Show First 3 letters, eg: "Mon"
3: Full Day, eg: "Monday"
*/
foreach($this->day_order as $r) {
switch($this->day_format) {
case(1):
echo "<th>" . substr($r, 0, 1) . "</th>";
break;
case(2):
echo "<th>" . substr($r, 0, 3) . "</th>";
break;
case(3):
echo "<th>" . $r . "</th>";
break;
} // Close switch
} // Close foreach
echo "</tr>";
$this->make_cells();
} // Close function
function make_cells($table = '') {
echo '<h3>Επέλεξε μία μέρα</h3>';
echo "<tr>";
foreach($this->days as $i => $r) { // Loop through the date array
$j = $i + 1; $tag = 0;
// If the the current day is found in the day_closed array, bookings are not allowed on this day
if(in_array($r['dayname'], $this->day_closed)) {
echo "\r\n<td width='21' valign='top' class='closed'>" . $this->day_closed_text . "</td>";
$tag = 1;
}
// Past days are greyed out
if (mktime(0, 0, 0, $this->month, sprintf("%02s", $r['daynumber']) + 1, $this->year) < strtotime("now") && $tag != 1) {
echo "\r\n<td width='21' valign='top' class='past'>";
// Output day number
if($r['daynumber'] != 'blank') echo $r['daynumber'];
echo "</td>";
$tag = 1;
}
// If the element is set as 'blank', insert blank day
if($r['dayname'] == 'blank' && $tag != 1) {
echo "\r\n<td width='21' valign='top' class='unavailable'></td>";
$tag = 1;
}
// Now check the booking array $this->booking to see whether we have a booking on this day
$current_day = $this->year . '-' . $this->month . '-' . sprintf("%02s", $r['daynumber']);
if(isset($this->bookings_per_day[$current_day]) && $tag == 0) {
$current_day_slots_booked = count($this->bookings_per_day[$current_day]);
if($current_day_slots_booked < $this->slots_per_day) {
echo "\r\n<td width='21' valign='top'>
<a href='reservation.php?month=" . $this->month . "&year=" . $this->year . "&first_name=" . $_GET['first_name'] . "&email=" . $_GET['email'] . "&last_name=" . $_GET['last_name'] . "&rsvnumb=" . $_GET['rsvnumb'] . "&telephone=" . $_GET['telephone'] . "&pon=" . $_GET['pon'] . "&user_id=" . $_GET['user_id'] . "&uid=" . $_GET['uid'] . "&page_id=" . $_GET['page_id'] . "&day=" . sprintf("%02s", $r['daynumber']) . "' class='part_booked' title='This day is part booked'>" .
$r['daynumber'] . "</a></td>";
$tag = 1;
} else {
echo "\r\n<td width='21' valign='top'>
<a href='reservation.php?month=" . $this->month . "&year=" . $this->year . "&first_name=" . $_GET['first_name'] . "&email=" . $_GET['email'] . "&last_name=" . $_GET['last_name'] . "&rsvnumb=" . $_GET['rsvnumb'] . "&telephone=" . $_GET['telephone'] . "&pon=" . $_GET['pon'] . "&user_id=" . $_GET['user_id'] . "&uid=" . $_GET['uid'] . "&page_id=" . $_GET['page_id'] . "&day=" . sprintf("%02s", $r['daynumber']) . "' class='fully_booked' title='This day is fully booked'>" .
$r['daynumber'] . "</a></td>";
$tag = 1;
} // Close else
} // Close if
if($tag == 0) {
echo "\r\n<td width='21' valign='top'>
<a href='reservation.php?month=" . $this->month . "&year=" . $this->year . "&first_name=" . $_GET['first_name'] . "&email=" . $_GET['email'] . "&last_name=" . $_GET['last_name'] . "&rsvnumb=" . $_GET['rsvnumb'] . "&telephone=" . $_GET['telephone'] . "&pon=" . $_GET['pon'] . "&user_id=" . $_GET['user_id'] . "&uid=" . $_GET['uid'] . "&page_id=" . $_GET['page_id'] . "&day=" . sprintf("%02s", $r['daynumber']) . "' class='green' title='Please click to view bookings'>" .
$r['daynumber'] . "</a></td>";
}
// The modulus function below ($j % 7 == 0) adds a <tr> tag to every seventh cell + 1;
if($j % 7 == 0 && $i >1) {
echo "\r\n</tr>\r\n<tr>"; // Use modulus to give us a <tr> after every seven <td> cells
}
}
echo "</tr></table></div><!-- Close outer_calendar DIV -->";
if(isset($_GET['year']))
$this->basket();
echo "</div><!-- Close LHS DIV -->";
// Check booked slots for selected date and only show the booking form if there are available slots
$current_day = $this->year . '-' . $this->month . '-' . $this->day;
$slots_selected_day = 0;
if(isset($this->bookings_per_day[$current_day]))
$slots_selected_day = count($this->bookings_per_day[$current_day]);
if($this->day != 0 && $slots_selected_day < $this->slots_per_day) {
$this->booking_form();
}
} // Close function
Have someone any idea about this script and how can i change the language of the month (greek)?
The date() function can only use English for its outputs. You'd have to use strftime() instead, while setting the locale with setlocale(). This will output in the language of the set locale, in this case - greek.
The two have somewhat different formats, but aren't altogether that different. A brief example is given below.
setlocale(LC_TIME, 'el_GR.UTF-8'); // Set the locale to greek
echo strftime("%A", $d); // Outputs weekname, Monday through Sunday
echo strftime("%m", $this->back) // Outputs month, numerically, e.g. "10"
echo strftime("%B, %Y", $this->selected_date); // Outputs e.g "October, 2016"
// These comments, about the formats, are in English,
// because I don't know the Greek translation
// It will be in Greek should the locale be installed and properly set
Change the date() functions to strftime() instead (with the new parameters, found in the documentation), and you should be good!
If the above doesn't work, it's because that locale (el_GR, for Greek) hasn't been installed on your server.
References
http://php.net/manual/en/function.strftime.php
http://php.net/manual/en/function.setlocale.php
Thank you for your answer. i tried setlocale(LC_TIME, 'el_GR.UTF-8'); but nothing happend. I have tried setlocale(LC_ALL, 'greek'); but the greek words are ???????.When i encode page to windows-1253 i can see the month in greek language but this is not a solution. What can i do?
EDIT:
I found the solution
$date_encoded = strftime('%B %Y', $this->selected_date);
$date_encoded = iconv('Windows-1253', 'UTF-8//IGNORE', $date_encoded);
How we can change the default time to dynamic using mysqli db
// Time Related Variables
public $booking_start_time = "09:00"; // The time of the first slot in 24 hour H:M format
public $booking_end_time = "21:00"; // The time of the last slot in 24 hour H:M format