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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Deprecated and Headed for the Dustbin By now, you have probably heard that some PHP features, while convenient, can also cause PHP security problems.  This article discusses one of those, called register_globals.  It is a thing you do not want.  …
Part of the Global Positioning System A geocode ( is the major subset of a GPS coordinate (, the other parts being the altitude and t…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
The viewer will learn how to count occurrences of each item in an array.

867 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

21 Experts available now in Live!

Get 1:1 Help Now