{ DateTime with Carbon Part 1 }

The Carbon package (https://carbon.nesbot.com/) takes PHP’s DateTime class to a new level for really accurate date formatting. I created a simple trait that I can drop in a class (note that it requires PHP 7.1):

namespace Vendor;

use Carbon\Carbon;

trait DateHelper {

   protected $tz = 'America/New_York';
   protected $dateFormat = 'm_d_Y';

   /**
    * @return Carbon
    */
   public function getCarbonDate() : Carbon {
      return Carbon::now( $this->tz );
   }

   /**
    * @return string
    */
   public function getFormattedDate( $format = 'm_d_Y' ) : string {
      return Carbon::now( $this->tz )->format( $format );
   }

   /**
    * @param string $dateFormat
    */
   public function setDateFormat( string $dateFormat ) {
      $this->dateFormat = $dateFormat;
      return $this;
   }

   /**
    * @return string
    */
   public function getDateFormat() : string {
      return $this->dateFormat;
   }

   /**
    * @param string $tz
    */
   public function setTz( string $tz ) {
      $this->tz = $tz;
      return $this;
   }

   /**
    * @return string
    */
   public function getTz() : string {
      return $this->tz;
   }
}

It’s setup with fluent setters so you can override the defaults when necessary:

class SomeClass {
    use Vendor\DateHelper;

    public function getDate() {
        return $this->setTz('SomeCity/SomeState')->getFormattedDate('m/d/y h:i');
    }
}

$someInstance = new SomeClass();
echo $someInstance->getDate();