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...

React Advanced JSX

 class vs className This lesson will cover more advanced JSX. You’ll learn some powerful tricks and some common errors to avoid. Grammar in JSX is mostly the same as in HTML, but there are subtle differences to watch out for. The most frequent of these involves the word class. In HTML, it’s common to use class as an attribute name: <h1 class = "big" > Title </h1> In JSX, you can’t use the word  class ! You have to use  className  instead: <h1 className = "big" > Title </h1> This is because JSX gets translated into JavaScript, and  class  is a reserved word in JavaScript. When JSX is  rendered , JSX  className  attributes are automatically rendered as  class  attributes. Self-Closing Tags Another common JSX error involves  self-closing tags . What’s a self-closing tag? Most HTML elements use two tags: an  opening tag  ( <div> ), and a  closing tag  ( </div> ). However, som...