Counting Days So Far This Year..

Posted on 2008-10-01
Last Modified: 2008-10-24
I want to count how many days have passed this year so far.

I've attached how I'm doing right now.. it seems a bit.. robust.

Is there a better way to do this?  Is there a way to calculate business days.

if( function_exists( 'date_default_timezone_set' ) )


	// Set the default timezone to US/Eastern

	date_default_timezone_set( 'US/Eastern' );



// Will return the number of days between the two dates passed in

function count_days( $a, $b )


    // First we need to break these dates into their constituent parts:

    $gd_a = getdate( $a );

    $gd_b = getdate( $b );


    // Now recreate these timestamps, based upon noon on each day

    // The specific time doesn't matter but it must be the same each day

    $a_new = mktime( 12, 0, 0, $gd_a['mon'], $gd_a['mday'], $gd_a['year'] );

    $b_new = mktime( 12, 0, 0, $gd_b['mon'], $gd_b['mday'], $gd_b['year'] );


    // Subtract these two numbers and divide by the number of seconds in a

    //  day. Round the result since crossing over a daylight savings time

    //  barrier will cause this time to be off by an hour or two.

    return round( abs( $a_new - $b_new ) / 86400 );



// Prepare a few dates

$date1 = strtotime( '1/01/2008 12:01am' );

$date2 = strtotime( '10/01/2008 8:36pm' );

$dayspassed = count_days($date1, $date2); 

echo $dayspassed;


Open in new window

Question by:cstormer
  • 2

Author Comment

ID: 22621241
With the above solution I also ahve issues with it not automatically knowing today's date...

$date1 = strtotime( '1/01/2008 12:01am' );
$date2 = strtotime( '10/01/2008 8:36pm' );

Any help here would be great... (and if there is a way for it to always know what the 1st of the year is)...

Accepted Solution

sistemu earned 500 total points
ID: 22622043
Here is a much shorter version.

$var1 = strtotime(date ("Y-m-d H:i:s"));

$var2 = strtotime("01/01/".date('Y') );

$rez = round(($var1 - $var2) / (60*60*24)); //seconds in a day

echo 'Today: '.$var1.'<br>';

echo 'Rez: '.$rez;


Open in new window


Assisted Solution

sistemu earned 500 total points
ID: 22622121
I'm sorry... that wasn't a final version, I skipped a few things.
Hope you like it.

function return_days_passed($new_date = 0){

    if($new_date != 0)

        $new_date = strtotime($new_date);


        $new_date = strtotime(date ("Y-m-d H:i:s"));

    $first_day = strtotime("01/01/".date('Y H:i:s',$new_date) );

    return round(($new_date - $first_day) / (60*60*24)); //seconds in a day


echo return_days_passed().'<br>';

echo return_days_passed('05/01/2005 8:36pm');


Open in new window


Featured Post

Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

Join & Write a Comment

Suggested Solutions

These days socially coordinated efforts have turned into a critical requirement for enterprises.
Since pre-biblical times, humans have sought ways to keep secrets, and share the secrets selectively.  This article explores the ways PHP can be used to hide and encrypt information.
The viewer will learn how to count occurrences of each item in an array.
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.

746 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now