Skip to main content

How to check business hour, non-business hour, weekend and holiday using PHP?

At times, you may have faced problem in finding the solution where you have date&time as input and should check whether the date falls on Weekend, Holiday or Weekday & the time is between Business hours or Non-business hours.

Here is a code snippet to find the input(i.e date and time) comes under Holiday, Weekend, Business Hours and Non-Business Hours.

<?php
 # Getting Workday Type
 # Suppose I consider the date with time 2018-12-25 19:28:00
 # You need to find out this date&time among the list of the Business hour, Non-business hour, Weekends, And Holidays
 # Holidays list & Weekdays are in Array
 # Consider Business works 9:00 AM to 6:00PM

 $holidays = ['01-01-2018','25-12-2018','10-07-2019','15-08-2019'];
 $weekdays = [0,1,2,3,4,5,6]; //['mon','tue','wed','thu','fri']
 $input_date = '2018-12-25 19:28:00'; //'YYYY-MM-DD h:i:s'
 $business_start_time = "09:00"; 
 $business_end_time = "18:00"; 
 $type = "";

 #1st check Holiday or not
 $dt = new DateTime($input_date);
 $date = $dt->format('d-m-Y');
 if(in_array($date,$holidays))
 {
  $type = "Holiday";
 }


 #2nd Check week end or not
 $wk_no = date("w", strtotime($input_date)); //["0"=>"sun","1"=>"mon"....."6"=>"sat"]
 if(($wk_no == 0 || $wk_no == 6) && $type != "Holiday" && !in_array($wk_no,$weekdays))
 {
  $type = "Weekend";
 }

 #3rd Check work day even weekend also working day or not
 if(in_array($wk_no,$weekdays) && $type != "Weekend" && $type != "Holiday")
 {
  $type = "Working day";
 }

 #4th Condition check Business hour or non-business hour
 $begin = date("H:i", strtotime($business_start_time)); // gives 24 format
 $end = date("H:i", strtotime($business_end_time));
 $now = date("H:i", strtotime($input_date));
 if (($now >= $begin && $now <= $end) && $type == "Working day")
 {
  $type = "business hour";
 }
 else if($type == "Weekend")
 {
  $type = "Weekend";
 }
 else if($type == "Holiday")
 {
  $type = "Holiday";
 }
 else 
 {
  $type = "Non-business hour";
 }

 echo $type."
";
 ?>
 
 //OUTPUT: Holiday

Comments

Popular posts from this blog

Laravel Commands

Laravale commands #Check route list php artisan route:list #Check upload files links php artisan storage:link #Check database connected or not php artisan db #Make Request file php artisan make:request YourNameRequest #Make Controller #(In this statement you used -r -> resources and -m -> model. It will create CustomersController and Customers Model files) php artisan make:controller CustomersController -r -m Customers #Make Resource file php artisan make:resource CustomersResource #To check migration files status that those files are running or not with below commands php artisan migrate:status #To check if there is any pending migrate files to run #(also this command shows us the mysql query before running migration file) php artisan migrate --pretend #To make a database table (in this example Products name as taken) php artisan make:migration create_products_table #To create a Request file php artisan make:request StoreProductRequest php artisan make:request Up...

Mysql columns creation in laravel

List of columns  $table->id(); // increment value $table->string('title')->comment('this is blog title'); $table->string('slug')->unique(); $table->text('short_desc'); $table->longText('description'); $table->boolean('is_published')->default(false); $table->integer('min_of_read')->nullable(true); $table->enum('status', ['Active', 'Inactive']); $table->float('discount'); $table->smallInteger('type_id'); $table->date('start_date')->nullable(); $table->timestamps(); $table->foreign('created_by')->references('id')->on('users'); // introducing foreign key $table->unsignedBigInteger('user_id'); //? $table->decimal('latitude', 9, 6)->nullable(true); // Let's say you want starting value from 1000 $table->id()->from(1000); // increment value start from 1000 ->nullabl...

Laravel form validations

 Laravel Validations: List of types "first_name" => 'required|alpha:ascii|min:3|max:100',// alpha:ascii (only accepts a-z) "middle_name" => 'string', "last_name" => 'required|string', "email" => 'required|email|unique:users,email', "password" => 'required|string|confirmed', "sex" => 'required|string', "phone_no" => 'required|string', "account_type" => 'required|string', "dob" => 'required|date_format:d-m-Y', // date with format "nationality" => 'required|string', "company" => 'required|string', "company_sector" => 'required|string', "company_address" => 'required|string' "bank_account_no" => 'required|min_digits:3|max_digits:5', "role" => 'required|in:admin,editor,viewer', ...