تعریف تابع در PHP

توابع به دسته ای یا مجموعه ای از کدها و خطوط برنامه نویسی گفته می شود که یک سری محاسبات را انجام داده و در صورت نیاز مقداری را به برنامه باز می گرداند. از طرفی توابع را می توان در هر نقطه ای که مورد نیاز بود فراخوانی کرد. در زیر مزایای استفاده از توابع را مشاهده می کنید:

زبان برنامه نویسی PHP بیش از هزاران تابع آماده (توکار) دارد که در قسمت های قبلی با تعدادی از آنها آشنا شدیم. مثلا تابع print که در زیر نحوه ی استفاده از آن را ملاحظه می کنید، برای نمایش متن در خروجی استفاده می شود. در واقع مشابه تابع echo‌ عمل می کند:

        print("print is a pseudo-function");
        

در این مثال پرانتز ها بیانگر این هستند که تابع print یک ورودی از نوع متنی دریافت و آن را در خروجی نمایش می دهد.

بنابراین توابع آرگومان هایی را به عنوان ورودی دریافت کرده و محاسباتی روی آنها انجام می دهند. البته گاهی می توان همین توابع را بدون آرگومان استفاده کرد. مثلا تابع phpinfo اطلاعات کاملی در ارتباط با زبان برنامه نویسی، وب سرور و … در اختیار کاربر قرار می دهد. این تابع بدون هیچگونه آرگومانی قابل اجرا است:

    phpinfo();
    

در صورتیکه دستور فوق را درون یک فایل با پسوند php. قرار دهید و آن را در مرورگر خود اجرا نمایید. صفحه ای حاوی اطلاعات زبان برنامه نویسی PHP‌ و وب سرویسی که روی آن نرم افزار ایجاد شده است، در اختیار شما قرار می گیرد.

برخی دیگر از توابع توکار زبان PHP مثل تابع strrev یا str_repeat وجود دارند که برای کار با رشته ها می باشند:

<?php
	echo strrev(" .dlrow olleH"); // بر عکس نوشتن رشته ها
	echo str_repeat("Hip ", 2); // تکرار کردن رشته
	echo strtoupper("hooray!"); // بزرگ کردن تمام حروف رشته
?>
    

اما این توابع توکار اگرچه خیلی گسترده و زیاد هستند ولی پاسخگوی نیاز هر برنامه نویس نیستند و باید هر فرد متناسب با نیاز برنامه اش، تابعی را ایجاد کند. در ادامه به نحوه ی تعریف کردن توابع می پردازیم:

ساخت تابع در PHP

سینتکس کلی ساخت یک تابع در زبان برنامه نویسی PHP به صورت زیر است:

function function_name([parameter [, ...]])
{
    // Statements
}

یعنی ابتدا کلمه ی function را نوشته و سپس با توجه به نیاز نام تابع را که دلخواه است تعیین می کنید. داخل پرانتزها پارامترهایی که به صورت ورودی هستند نوشته و در نهایت داخل دو آکولاد { } مجموعه کدهایی که تابع اجرا خواهد کرد را، برنامه نویسی می کنید. بنابراین اصول ایجاد یک تابع در زبان PHP به صورت زیر خلاصه می شود:


توجه به این نکته ضروری است که نام توابع به بزرگ و کوچک بودن حروف حساس است یعنی تابع PRINT با تابع print با تابع PRint کاملا متفاوت عمل می کند.

بازگشت یک مقدار توسط توابع در PHP

گاهی نیاز است که توابع یک سری محاسبات را انجام داده و مقدار نهایی را به عنوان خروجی در اختیار برنامه قرار دهند. در این حالت باید از دستور return درون تابع استفاده کرد. در مثال زیر فرض کنید یک تابع تعریف کرده ایم که نام و نام خانوادگی را به صورت مجزا دریافت می کند و سپس آنها را به همدیگر متصل کرده و مقدار نهایی (حاصل جمع نام و نام خانوادگی) را در خروجی نمایش می دهد.

<?php
	echo fullName("مسعود","صالحی");
	function fullName($firstName, $lastName)
	{
		return $firstName . " " . $lastName;
	}
?>

همانطور که ملاحظه می کنید در این مثال ابتدا یک تابع به نام fullName تعریف و با استفاده از علامت دات (.) مقدار آرگومان های ورودی firstName و lastName را به یکدیگر متصل و در نهایت به خروجی ارسال کرده ایم. برای فراخوانی تابع کافیست نام آن (fullName) را به همراه آرگومان موردنظر در برنامه ی خود بنویسیم.

بازگشت یک آرایه توسط تابع در PHP

در مثال قبلی دو رشته را ارسال و حاصل خروجی که یک رشته متصل شده بود را نمایش دادیم. حال فرض کنید به جای یک مقدار بخواهیم آرایه ای از چندین مقدار را توسط یک تابع بازگردانیم. در مثال زیر ابتدا نام و نام خانوادگی و سن فرد را دریافت کرده و سپس نام فرد به همراه سن اش را در خروجی نمایش می دهیم:

<?php
	$userData = fullName("مسعود","صالحی", 28)
	echo $userData[0] . " " . $userData[2];
	function fullName($firstName, $lastName, $age)
	{
		return array($firstName, $lastName, $age);
	}
?>
    

بازگشت متغییرهای گلوبال (جهانی) توسط توابع در PHP

در فصل های قبلی در ارتباط با متغییرهای جهانی و داخلی صحبت کردیم و اینجا اشاره ای مختصر به آنها خواهیم داشت.

متغییرهای جهانی به متغییرهایی گفته می شود که خارج از یک تابع در دسترس هستند و در سایر توابع می توان از آنها استفاده کرد.

متغییرهای محلی یا داخلی به متغییرهایی گفته می شوند که فقط و فقط داخل توابع قابل دسترس هستند و مقداردهی می شوند.

حال اگر بخواهیم یک متغییر جهانی را درون یک تابع استفاده و مقدار آن را تغییر دهیم باید از کلمه ی global‌ استفاده کنیم. به مثال زیر توجه کنید:

<?php
	$firstName = 'roxo';
	$lastName = 'academy';
	echo $firstName . " " . $lastName;
	fullName();
	echo $firstName . " " . $lastName;
	
	function fullName($firstName, $lastName)
	{
		global $firstName;
		$firstName = 'Masoud';
		global $lastName;
		$lastName = 'Salehi';
	}
?>
    

در این مثال ابتدا مقادیر firstName و lastName را برابر roxo و academy قرار داده ایم. سپس نام و نام خانوادگی را در خروجی نمایش می دهیم. در مرحله بعدی تابع fullName را اجرا کرده و مجددا خروجی را به صورت نام و نام خانوادگی به تصویر کشیده ایم. اما نکته ی قابل توجه این است که قبل از اجرای تابع نام و نام خانوادگی برابر roxo academy و پس از اعمال تابع برابر Masoud Salehi‌ است. به عبارت دیگر با استفاده از کلمه ی global درون تابع به متغییر خارج از تابع دسترسی پیدا کرده و مقدار آن را تغییر داده ایم.

استفاده از توابع در سایر فایل های PHP

خب دوستان تا به اینجای کار نحوه ی تعریف یک تابع به همراه روش های متفاوت بازگشت آن را یاد گرفتید. اما الان نوبت به این رسیده که بتوانیم یک تابع را درون یک فایل PHP استفاده کنیم. همیشه در ذهن داشته باشید که بدون معرفی توابع تعریف شده به فایل ها نمی توانید از آنها بهره ببرید. این کار باعث می شود که شما دیگر کدهای توابع خود را تند تند کپی و پیست نکنید بلکه فقط یکبار آنها را تعریف کرده و سپس فایل توابع را درون سایر فایل های PHP بکار ببرید.

دستور include

اگر دستور include را درون یک فایل php بکار ببرید در واقع به سیستم اطلاع می دهید که این فایل باید از توابع موجود که به عنوان ورودی include معرفی می شوند استفاده کند:

<?php
    include "library.php";
    // Your code goes here
?>

در مثال فوق کلیه ی توابع موجود در فایل library.php داخل فایل جاری در دسترس است.

دستور include_once

با استفاده از این دستور می توانید به سیستم بگویید که اگرچه چندین فایل مشابه library.php در فایل جاری فراخوانی شده است ولی شما فقط یکی از آنها را در نظر بگیر. مثلا فرض کنید یک فایل با نام functions.php درون فایل جاری فراخوانی شده است و درون همین functions.php یکبار دیگر فایل library.php فراخوانی گردیده است. حال اگر با دستور زیر فراخوانی توابع را انجام دهید خواهیم داشت:

<?php
    include "library.php";
    include "funtcions.php";
    // Your code goes here
?>

در این صورت با خطا مواجه خواهید شد چون درون فایل جاری در واقع دو بار فایل library.php فراخوانی گردیده است. (یکبار درون فایل functions.php و یکبار درون فایل جاری). بنابراین برای جلوگیری از این خطا از دستور زیر استفاده می کنیم:

<?php
    includeـonce "library.php";
    includeـonce "funtcions.php";
    // Your code goes here
?>

دستور require

این دستور مشابه دستور include عمل می کند با این تفاوت که در دستور include اگر تابع موردنظر یافت نشد یا فایل موجود نبود برنامه بدون هیچ خطایی به کار خود ادامه می دهد و تنها یک توصیه یا warning‌ ارائه می کند. درحالیکه دستور require ابتدا چک می کند که تابع وجود دارد یا خیر در صورتیکه وجود نداشت خطایی را نمایش می دهد. برای دقیق تر شدن برنامه بهتر است به جای include از دستور require استفاده کنید:

<?php
    require "library.php";
    // Your code goes here
?>

دستور require_once

این دستور نیز مشابه دستور include_once است با تفاوتی که در نمایش خطاها دارد. بنابراین بهترین حالت برای فراخوانی یک تابع استفاده از دستور require_once است:

<?php
    requireـonce "library.php";
    requireـonce "funtcions.php";
    // Your code goes here
?>
اگر بخواهیم یک متغیر فقط یک بار در درون تابع اجرا شود از کلمه کلیدی static قبل از تعریف متغیر استفاده میکنیم. مثال:
    function test(){
        static counter  = 0;
 این خط باعث میشود که هر بار متغیر صفر نشود.       
        
        counter++;
    }
    
در صورتی که درون تابع پارامترهایی بدهیم و برای صدا زدن یکی از پارامترها را ندهیم برنامه ارور میدهد.برای جلوگیری از این موضوع میتوان برای پارامتر ها مقدار دیفالت در نظر گرفت . به شکل زیر:
    function test($a,$b = 0){
        
    }
    

تابع بی‌نام (anonymous function)

توابع ناشناخته که اصطلاحا به آن‌ها تابع روی هوا (on the fly) گفته می شود، به طور ساده تابعی است بدون‌نام. مانند مثال زیر:

<?php
// Anonymous function

function () {
  return "Hello world";
}

این مفهوم در PHP تحت قالب Lambda وClosures پیاده سازی شده است. در ادامه مطلب بیشتر به این مورد خواهیم پرداخت.

توابع Lambada

یک Lambada تابع ناشناخته‌ای است که به یک متغیر انتساب داده می شود و یا به عنوان پارامتر به تابع دیگر انتساب داده می‌شود.

استفاده از Lambada

از آن جا که این مدل از تابع‌ها نام ندارند، پس شما نمی‌توانید مثل تابع‌های معمولی آن‌ها را صدا بزنید. بلکه باید همینطور که قبلا به آن اشاره شد، تابع را به یک متغیر انتساب بدهید و یا به عنوان پارامتر به تابع دیگری ارسال کنید.

<?php
// Anonymous function

// assigned to variable
$greeting = function ($world = '') {
  return "Hello". $world;
};

// Call function
echo $greeting('world');

// Returns "Hello world"

نکته: همینطور که در کد بالا هم مشاهده می کنید، سمی کالن (;) را بعد از اتمام تابع قرار می‌دهیم.

نکته: همینطور که در کد بالا هم مشاهده می کنید، می‌توانیم پارامتر به صورت دلخواه به تابع بدهیم (world$).

به منظور استفاده از تابع ناشناخته، ما این تابع را به یک متغیر انتساب میدهیم و سپس متغیر را به عنوان یک تابع، Call یا صدا میزنیم.

شما همچنین می‌توانید Lambadaایی که تعریف کرده‌اید را به عنوان پارامتر به تابع دیگر بفرستید:

<?php
// Pass Lambda to function

function shout ($message) {
  echo $message();
}


// Call function
shout(function() {
  return "Hello world";
});

برای چی من باید از Lambada استفاده کنم؟

شاید الان با خودتان گفتید که این تابع بدون اسم چه زمانی کارایی دارد؟

Lambada از تعریف تابع هایی که معمولا کد کوچک و مختصری دارند و ممکن است شما در طول اجرای برنامه، مثلا، فقط یکبار صدا بزنید، خودداری می کند. اغلب شما، به تابعی نیاز دارید که کاری را برای شما انجام دهد، اما این نیاز را پیدا نمی کنید که آن را داخل global scope برنامه یا حتی به عنوان بخشی از بقیه کدها اضافه کنید.

به جای اینکه تابعی داشته باشید که یک بار استفاده و بعد هم رها شود، میتوانید از Lambada استفاده کنید.

یک مورد پر استفاده دیگر توابع ناشناخته درfunction callbackها است.

اگر مفهوم توابع callback در PHP را نمی‌دانید، یک جستجو راجع به آن انجام دهید، چرا که شرح کامل آن در این بحث نمی گنجد. اما یک نگاه سطحی با یک مثال به آن می‌اندازیم تا بحث بیشتر برایتان روشن شود.

Callback هر تابعی که صدا زده شده است توسط تابع دیگری که البته آن تابع دیگر، تابع اول را به عنوان پارامتر میگیرد و Call می‌کند. معمولا callback تابعی است که زمانی صدا زده می‌شود که اتفاقی رخ داده باشد، که در دنیای برنامه نویسی به آن اتفاق، رویداد یا event گفته میشود.

مثال زیر یک مثال پایه‌ایی از تابع‌های callback است:

شما می‌توانید تابعی که نامش در یک متغیر ذخیره شده است را call کنید. فقط کافیست به انتهای نام متغیر، پرانتز باز و بسته () اضافه کنید. مثل ()variable$

<?php
function thisFuncTakesACallback($callbackFunc)
{

  echo "I'm going to call $callbackFunc!
"; $callbackFunc(); } function thisFuncGetsCalled() { echo "I'm a callback function!
"; } thisFuncTakesACallback( 'thisFuncGetsCalled' );

خب در مثال بالا، ما نام تابع thisFuncGetsCalled را به تابع ()thisFuncTakesACallback ارسال کردیم که سپس این تابع، تابعی که به آن فرستاده شده بود رو صدا زد.

از توابع ناشناخته در توابع بومی PHP استفاده شده، که مثال‌های فوق العاده‌ای در این زمینه هستند، از جمله array_walk, array_map, array_reduce و array_filter usort.

در مثال زیر نمونه‌ایی از callback function را مشاهده می‌کنید که با Lambada و در تابع array_filter پیاده سازی شده است.

نکته: کار array_filter به این صورت است که پارامتر اول یک آرایه مثلا input$ را می‌گیرد و در یک Loop قرار می‌دهد و هر دفعه مقدار فعلی آرایه را به function callback ارسال یا pass میکند. اگرfunction callback مقدار true برگرداند، value جاری خانه مورد نظر از آرایه برگردانده می‌شود. در ضمن keyهای آرایه هم تغییری نمی‌کنند.

<?php
$input = array(1, 2, 3, 4, 5);

$output = array_filter($input, function ($v) { return $v > 2; });

// $output == array(2 => 3, 3 => 4, 4 => 5)

در مثال بالا، آرایه ورودی فیلتر می‌شود؛ به طوریکه تمام اعداد بزرگتر از 2 استخراج می‌شوند.

در مثال بالا، عبارت { ;function ($v) { return $v > 2 یک Lambada است، که اگر میخواهید قابل استفاده مجدد باشد باید آن را داخل یک متغیر ذخیره کنید.

اطلاعات بیشتر: پیشتر می‌توانستید از create_function در PHP استفاده کنید که اساسا همین کار را انجام میدهد.

<?php
// Use create_function

$greeting = create_function('', 'echo "Hello World!";');



// Call function
$greeting();

توابع Closure

یک Closure (کلوژر) اساسا همان Lambada است، علاوه بر اینکه، می‌توانید به متغیرهای خارج از محدوده‌ایی که تعریف شده هم، دسترسی داشته باشد.

<?php
// Create a user

$user = "Philip";

// Create a Closure

$greeting = function() use ($user) {

  echo "Hello $user";

};

// Greet the user
$greeting(); // Returns "Hello Philip"

همان طور که در بالا می بینید Closure می‌تواند به متغیر user$ دسترسی داشته باشد، به این دلیل که در عبارت use، تعریف تابع Closure آورده شده است.

همچنین اگر می‌خواهید مقدار متغیر user$ را داخل Closure تغییر بدهید و بیرون آن هم این تغییر از بین نرود، باید حتما قبل از متغیر داخل عبارت use یک & (امپرسند) قرار بدهید تا متغیر به صورت ارسال با مرجع فرستاده شود.

بیایید مثال array_filter را نیز با Closure انجام بدهیم.

<?php
$max_comparator = function ($max)
{
  return function ($v) use ($max) { return $v > $max; };
};

$input = array(1, 2, 3, 4, 5);

$output = array_filter($input, $max_comparator(3)); // Array ( [3] => 4 [4] => 5 )

در مثال بالا دو نکته را دیدید که یکی استفاده از توابع ناشناخته بصورت تودرتو و دیگری اینکه max$ به عنوان یک متغیر خارج از محدوده closure داخلی، مورد استفاده قرار گرفت.

مثالی از Closure در array_walk:

<?php
// Set a multiplier

$multiplier = 3;

// Create a list of numbers
$numbers = array(1,2,3,4);

// Use array_walk to iterate

// through the list and multiply

array_walk($numbers, function($number) use($multiplier) {

  echo $number * $multiplier;

});

در مثال بالا تقریبا این نیاز احساس نمی‌شود که یک تابع بسازید که 2 عدد را در هم ضرب کند در حالی که فقط در یک جا مورد استفاده قرار میگیرد. با استفاده از یک Closure به عنوان callback، ما می‌توانیم تابع را یکبار استفاده کنیم و دیگر آن را فراموش کنیم.

استفاده از this$ در توابع ناشناخته

در نیمه اول سال 2012، یعنی زمانی که PHP به نسخه 5.4 خودش رسید، قابلیت جدیدی به توابع ناشناخته اضافه شد. بوسیله این قابلیت قادر هستید به راحتی با استفاده از this$ داخل تابع ناشناخته، به یک نمونه Object دسترسی داشته باشید.

<?php
class Foo
{

  function hello() {
    echo 'Hello Nettuts!';
  }

  function anonymous()
  {
    return function() {
      $this->hello(); // $this wasn't possible before
    };
  }

}

class Bar
{

  function __construct(Foo $Foo) // object of class Foo typehint
  {
    $x = $Foo->anonymous(); // get Foo::hello()

    $x(); // execute Foo::hello()
  }

}

new Bar(new Foo); // Hello Nettuts!

استفاده در دنیای واقعی

یک مثال معروف از استفاده از این نوع توابع در routing درخواست ها در فریم ورک های مدرن است.

به عنوان مثال Laravel، به شما اجازه میده که مثل زیر عمل کنید:

<?php
Route::get('user/(:any)', function($name) {
  return "Hello " . $name;
});

کد بالا به سادگی با URLایی مثل user/Philip/، تطبیق داده می‌شود.

این یک مثال خیلی ساده بود، اما روشن میکند که چطور یک Closure در شرایطی که به آن نیاز هست می‌تواند مورد استفاده واقع شود.

در دیگر زبان ها چطور؟

توابع ناشناخته در خیلی از زبانهای برنامه نویسی وجود دارند (از جمله پایتون، دلفی، جاوا، C و …) و اگر Ruby و Javascript کار کرده باشید حتما به آن‌ها برخوردید، چون در این زبان‌ها بسیار متداول هستند.

البته این نکته نیز ناگفته نماند که کاربرد آن در PHP، دقیقا همان کاربردی نیست که بقیه زبان ها از آن دارند.

کار با تابع date در php:

کار با تاریخ و زمان در PHP

کار با تاریخ و زمان در PHP یکی از پرکاربردترین مباحث در برنامه نویسی PHP است. در این جلسه با تابع ()date در PHP آشنا خواهیم شد. کار با تاریخ و زمان در PHP توسط این تابع صورت می گیرد (تاریخ میلادی). در آینده در یک جلسه مجزا کار با تاریخ شمسی در PHP را نیز فراخواهیم گرفت. با ما همراه باشید تا با قابلیتهای جالب و کاربردی تابع ()date در PHP آشنا شویم.

 

مباحث این جلسه (کار با تاریخ و زمان در PHP) :

 

 

تابع ()date در PHP

همانگونه که پیش از این گفتیم، کار با تاریخ و زمان در PHP توسط تابع ()date صورت می گیرد. الگوی استفاده از تابع ()date در PHP بصورت (date (format , timestamp می باشد. پارامتر format یک رشته کاراکتری بوده و حاوی یک یا چند حرف الفبای انگلیسی می باشد. این بخش نشان دهنده اطلاعات مورد درخواست ما در مورد زمان و یا تاریخ موردنظر است.

 

پارامتر timestamp (مهر زمانی) اختیاری بوده و الزامی جهت استفاده از آن وجود ندارد. مهر زمانی یک عدد صحیح بزرگ بوده و معرف تعداد ثانیه های سپری شده از یک مبدا زمانی مشخص و قراردادی است. این مبدا زمانی، اول ژانویه سال ۱۹۷۰ میلادی است. چنانچه در تابع ()date پارامتر timestamp ذکر شود، اطلاعات بدست آمده بر اساس مهر زمانی تعیین شده خواهد بود. در غیر اینصورت اطلاعاتی که بدست می آید بر اساس زمان و تاریخ جاری (همین لحظه) است.

 

کاراکتر های مورد استفاده در پارامتر اول متد date:

کاراکتر توضیحات
d روز از ماه را به شکل عدد دورقمی نشان می دهد (از 01 تا 31).
D روز هفته را به صورت سه حرفی نشان می دهد.
j روز را به صورت عدد 1 یا دوحرفی بدون صفر پیش از آن نشان می دهد (از 1 تا 31).
l روز هفته را به صورت کامل نشان می دهد.
N روز هفته به شکل عددی نشان می دهد (از 1 تا 7).
S پسوند تاریخ را به شکل انگلیسی نشان می دهد (st، nd، rd یا th).
w روز هفته را به شکل عددی نشان می دهد (از 0 تا 6).
z روز از سال را نشان می دهد (از 0 تا 365).
W شماره هفته از سال را نشان می دهد.
F نام کامل ماه را نشان می دهد.
m شماره ماه به شکل عددی را همراه با صفر پیش از آن نشان می دهد (از 01 تا 12).
M نام ماه را به صورت سه حرفی نشان می دهد.
n شماره ماه بدون صفر پیش از آن را به شکل عددی نشان می دهد (از 1 تا 12).
t تعداد روزهای ماه را نشان می دهد.
L سال کبیسه را نشان می دهد (اگر سال کبیسه باشد 1 درغیر این صورت 0).
o شماره سال را به شکل عددی نشان می دهد.
Y شماره سال را به صورت 4 حرفی نشان می دهد.
y شماره سال را به صورت 2 حرفی نشان می دهد.
a am(قبل از ظهر) یا pm(بعد از ظهر) را با حروف کوچک نشان می دهد.
A Am یا PM را با حروف بزرگ نشان می دهد.
g ساعت را به صورت 12 ساعته و بدون صفر پیش از آن نشان می دهد (از 1 تا 12).
G ساعت را به صورت 24 ساعته و بدون صفر پیشین نشان می دهد (از 0 تا 23).
h ساعت را به صورت 12 ساعته و همراه با صفر پیشین نشان می دهد (از 01 تا 12).
H ساعت را به صورت 24 ساعته و همراه با صفر پیشین نشان می دهد (از 00 تا 23).
i دقیقه را همراه با صفر پیشین نشان می دهد (از 00 تا 59).
s ثانیه را همراه صفر پیشین نشان می دهد (از 00 تا 59).
u میکروثانبه را نشان می دهد.
e منطقه زمانی را نشان می دهد (مانند gmt یا utc).
O تفاوت زمانی با زمان گرینویچ را به ساعت نشان می دهد.
P تفاوت زمانی با گرینویچ را به ساعت و دقیقه نشان می دهد.

جدای از تابع ()date در PHP تابع دیگری به نام ()time وجود دارد که با استفاده از آن می توان timestamp لحظه کنونی را بدست آورد. در قطعه کد زیر پس از بدست آوردن مهر زمانی لحظه جاری، با استفاده از تابع ()date تاریخ روز جاری استخراج شده است.

<?php
$ts = time();
echo date("Y/m/d", $ts);
?>

خروجی قطعه کد فوق به صورت زیر است :

2019/03/29

در ادامه از ذکر کردن پارامتر timestamp خودداری کرده و اطلاعات مورد درخواست خود را بر اساس زمان و تاریخ جاری (با استفاده از بخش format) استخراج خواهیم کرد.

 

بدست آوردن تاریخ روز جاری

<?php
echo date("Y/m/d");
echo date("Y-m-d");
echo date("y/m/d");
echo date("Y M D");
?>

در قطعه کد فوق تاریخ جاری میلادی را به چهار شکل مختلف بدست آورده و نمایش داده ایم. حرف Y شماره سال میلادی را بصورت چهار رقمی بدست می آورد. حروف m و d نیز به ترتیب معرف شماره ماه و روز جاری هستند. به کوچک و بزرگ بودن حروف دقت داشته باشید.

 

در خط ۳ تاریخ جاری با استفاده از جداکننده خط مورب (/) و در خط ۵ با استفاده از جداکننده خط تیره () نمایش داده شده است. در خط ۷ شماره سال را بصورت دو رقمی نمایش داده ایم (با استفاده از حرف y). در خط ۹ نیز نام ماه (با حرف M) و روز هفته (با حرف D) را بصورت اختصاری سه حرفی در خروجی چاپ کرده ایم.

 

خروجی قطعه کد فوق به صورت زیر است :

2019/03/29
2019-03-29
19/03/29
2019 Mar Fri
<?php
echo date("F");
?>

در قطعه کد فوق نام کامل ماه جاری میلادی را با استفاده از حرف F بدست آورده و نمایش داده ایم. پیش از این دیدیم که با استفاده از حرف M در بخش format می توانیم نام ماه میلادی را بصورت اختصاری سه حرفی بدست آوریم.

 

خروجی قطعه کد فوق به صورت زیر است :

March
<?php
echo date("l");
?>

در قطعه کد فوق نام کامل روز هفته را با استفاده از حرف l بدست آورده و نمایش داده ایم. پیش از این دیدیم که با استفاده از حرف D در بخش format می توانیم نام روز هفته را بصورت اختصاری سه حرفی بدست آوریم.

 

خروجی قطعه کد فوق به صورت زیر است :

Friday

بدست آوردن شماره روز جاری

<?php
echo date("N");
echo date("w");
?>

در قطعه کد فوق شماره روز جاری هفته را به دو شکل مختلف بدست آورده و نمایش داده ایم. چنانچه از حرف N استفاده کنیم عددی را در بازه ۱ تا ۷ در یافت خواهیم کرد (۱ برای دوشنبه و ۷ برای یکشنبه). بطور مشابه چنانچه از حرف w کوچک استفاده کنیم عددی را در بازه ۰ تا ۶ دریافت خواهیم کرد (۰ برای یکشنبه و ۶ برای شنبه).

 

خروجی قطعه کد فوق به صورت زیر است :

5
5

اطلاع از اینکه امروز چندمین روز سال است

   
<?php
echo date("z");
?>

خروجی قطعه کد فوق به صورت زیر است :

87

اطلاع از اینکه در چندمین هفته از سال هستیم

<?php
echo date("W");
?>

در قطعه کد فوق با استفاده از حرف W بزرگ متوجه می شویم که در چندمین هفته از سال هستیم.

 

خروجی قطعه کد فوق به صورت زیر است :

13

اطلاع از اینکه ماه جاری چند روزه است

<?php
echo date("t");
?>

در قطعه کد فوق با استفاده از حرف t متوجه می شویم که ماه جاری میلادی چند روزه است. بر اساس خروجی های قبلی دیدیم که در ماه مارس میلادی هستیم.

 

خروجی قطعه کد فوق به صورت زیر است :

31

اطلاع از اینکه سال جاری کبیسه است یا خیر

<?php
echo date("L");
?>

در قطعه کد فوق با استفاده از حرف L متوجه می شویم که سال جاری میلادی کبیسه است یا خیر. مقدار برگشتی یکی از مقادیر ۰ یا ۱ خواهد بود. ۰ یعنی سال جاری کبیسه نیست و ۱ یعنی کبیسه است.

 

خروجی قطعه کد فوق عدد ۰ است.

 

بدست آوردن زمان جاری

<?php
echo date("g:i:s a");
?>

علاوه بر محاسبه تاریخ، تابع ()date در PHP قابلیت محاسبه زمان را نیز دارد. در قطعه کد فوق زمان جاری سیستم را بدست آورده و نمایش داده ایم. حرف g ساعت را به فرمت ۱۲ ساعته بدست می آورد (در بازه ۱ تا ۱۲). حروف i و s نیز به ترتیب معرف دقیقه و ثانیه هستند. حرف a نیز عبارت های am یا pm را در انتهای زمان نمایش می دهد. برای نمایش عبارات مذکور بصورت AM یا PM نیز می توان از حرف A در انتهای format استفاده کرد.

 

البته زمانی که بدین طریق بدست می آید یک اختلاف زمانی چند ساعته با زمان کنونی ما (ایران) دارد. دلیل این امر هم محاسبه زمان بر اساس زمان مبدا گرینویچ است. در ادامه راهکار تنظیم منطقه زمانی جهت نمایش دقیق و صحیح زمان را خواهیم دید.

 

خروجی قطعه کد فوق به صورت زیر است :

1:27:12 pm

نمایش زمان به دو فرمت ۱۲ و ۲۴ ساعته

<?php
echo date("g:i:s a");
echo date("G:i:s");
echo date("h:i:s a");
echo date("H:i:s");
?>

در قطعه کد فوق زمان جاری سیستم را به دو فرمت ۱۲ و ۲۴ ساعته بدست آورده و نمایش داده ایم. حروف g و h ساعت را به فرمت ۱۲ ساعته و حروف G و H ساعت را به فرمت ۲۴ ساعته بدست می آورند. تفاوت هر جفت از آنها در نمایش یا عدم نمایش عدد ۰ قبل از ساعت های تک رقمی است. [ g در بازه (۱۲-۱) ، G در بازه (۲۳-۰) ، h در بازه (۱۲-۰۱) ، H در بازه (۲۳-۰۰) ].

 

خروجی قطعه کد فوق به صورت زیر است :

1:27:12 pm
13:27:12
01:27:12 pm
13:27:12

تنظیم منطقه زمانی (timezone) جهت نمایش صحیح زمان

<?php
echo date("g:i:s a");
date_default_timezone_set("Asia/Tehran");
echo date("g:i:s a");
?>

در قطعه کد فوق زمان جاری سیستم را بدست آورده و نمایش داده ایم. پیش از این دیدیم که زمانی که بدین طریق بدست می آید یک اختلاف زمانی چند ساعته با زمان کنونی ما (ایران) دارد. دلیل این امر هم محاسبه زمان فوق بر اساس زمان مبدا گرینویچ است.

 

در ادامه با استفاده از تابع ()date_default_timezone_set منطقه زمانی مورد نظرمان را برای نمایش صحیح زمان تنظیم کرده ایم (Asia/Tehran). بدین ترتیب زمان به شکل صحیح (بر مبنای زمان ایران) نمایش داده خواهد شد. با جستجو در اینترنت می توانید مناطق زمانی دیگری را که قابل تنظیم هستند پیدا کنید.

 

خروجی قطعه کد فوق به صورت زیر است :

1:27:12 pm
4:57:12 pm

بدست آوردن منطقه زمانی تنظیم شده

<?php
echo date("e");
?>

در قطعه کد فوق با استفاده از حرف e می توانیم منطقه زمانی از قبل تنظیم شده را بدست آوریم.

 

خروجی قطعه کد فوق به صورت زیر است :

Asia/Tehran

بدست آوردن میزان اختلاف زمانی با مبدا گرینویچ

<?php
echo date("P");
?>

در قطعه کد فوق با استفاده از حرف P بزرگ می توانیم اختلاف زمانی خود را با مبدا زمانی گرینویچ بدست آوریم.

 

خروجی قطعه کد فوق به صورت زیر است :

+04:30