更改日期语言()

时间:2016-10-10 22:38:27

标签: php date

我有一个约会网站,我使用这个预订脚本http://www.planetphp.co.uk/free-php-booking-slots-calendar/。 不幸的是,我已经尝试了一切,以便在显示月份时更改语言。

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) . "&amp;first_name=" .  $_GET['first_name'] . "&amp;email=" .  $_GET['email'] . "&amp;last_name=" .  $_GET['last_name'] . "&amp;telephone=" .  $_GET['telephone'] . "&amp;user_id=" .  $_GET['user_id'] . "&amp;uid=" .  $_GET['uid'] . "&amp;rsvnumb=" .  $_GET['rsvnumb'] . "&amp;pon=" .  $_GET['pon'] . "&amp;page_id=" .  $_GET['page_id'] . "&amp;year=" . date("Y", $this->back) . "'>&laquo;</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) . "&amp;first_name=" .  $_GET['first_name'] . "&amp;email=" .  $_GET['email'] . "&amp;last_name=" .  $_GET['last_name'] . "&amp;telephone=" .  $_GET['telephone'] . "&amp;user_id=" .  $_GET['user_id'] . "&amp;uid=" .  $_GET['uid'] . "&amp;rsvnumb=" .  $_GET['rsvnumb'] . "&amp;pon=" .  $_GET['pon'] . "&amp;page_id=" .  $_GET['page_id'] . "&amp;year=" . date("Y", $this->forward) . "'>&raquo;</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 . "&amp;year=" .  $this->year . "&amp;first_name=" .  $_GET['first_name'] . "&amp;email=" .  $_GET['email'] . "&amp;last_name=" .  $_GET['last_name'] . "&amp;rsvnumb=" .  $_GET['rsvnumb'] . "&amp;telephone=" .  $_GET['telephone'] . "&amp;pon=" .  $_GET['pon'] . "&amp;user_id=" .  $_GET['user_id'] . "&amp;uid=" .  $_GET['uid'] . "&amp;page_id=" .  $_GET['page_id'] . "&amp;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 . "&amp;year=" .  $this->year . "&amp;first_name=" .  $_GET['first_name'] . "&amp;email=" .  $_GET['email'] . "&amp;last_name=" .  $_GET['last_name'] . "&amp;rsvnumb=" .  $_GET['rsvnumb'] . "&amp;telephone=" .  $_GET['telephone'] . "&amp;pon=" .  $_GET['pon'] . "&amp;user_id=" .  $_GET['user_id'] . "&amp;uid=" .  $_GET['uid'] . "&amp;page_id=" .  $_GET['page_id'] . "&amp;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 . "&amp;year=" .  $this->year . "&amp;first_name=" .  $_GET['first_name'] . "&amp;email=" .  $_GET['email'] . "&amp;last_name=" .  $_GET['last_name'] . "&amp;rsvnumb=" .  $_GET['rsvnumb'] . "&amp;telephone=" .  $_GET['telephone'] . "&amp;pon=" .  $_GET['pon'] . "&amp;user_id=" .  $_GET['user_id'] . "&amp;uid=" .  $_GET['uid'] . "&amp;page_id=" .  $_GET['page_id'] . "&amp;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

让某人知道这个剧本,我怎样才能改变月份的语言(希腊语)?

3 个答案:

答案 0 :(得分:0)

date()功能只能使用英语输出。在使用strftime()设置区域设置时,您必须使用setlocale()。这将以设置的语言环境的语言输出,在本例中为 - 希腊语。

这两种格式有些不同,但并不完全不同。下面给出一个简短的例子。

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

date()功能更改为strftime()(使用documentation中的新参数),您应该感觉良好!

如果上述方法不起作用,那是因为您的服务器上尚未安装该区域设置(希腊语为el_GR)。

参考

答案 1 :(得分:0)

感谢您的回答。我试过setlocale(LC_TIME,'el_GR.UTF-8');但没有任何事情发生。我试过setlocale(LC_ALL,'greek');但是希腊语是???????。当我将页面编码到windows-1253时,我可以看到希腊语中的月份,但这不是解决方案。我该怎么办?

修改 我找到了解决方案

$date_encoded = strftime('%B %Y', $this->selected_date);
$date_encoded = iconv('Windows-1253', 'UTF-8//IGNORE', $date_encoded);

答案 2 :(得分:0)

我们如何使用mysqli db

将默认时间更改为动态

//与时间相关的变量

public $ booking_start_time =&#34; 09:00&#34 ;; //第一个插槽的时间为24小时H:M格式
public $ booking_end_time =&#34; 21:00&#34 ;; // 24小时H:M格式的最后一个插槽的时间