Function Get-DateExtended {
   Gets common extended date values that are not included by default with the Get-Date cmdlet
   This function includes added values for:
    FirstDayOfYear : First day of the year
    LastDayOfYear : Last day of the year
    StartOfWeek : First day of the week
    EndOfWeek : Last day of the week
    StartOfMonth : First day of the month
    EndOfMonth : Last day of the month
    TimeZone : Current machine timezone
    Quater : The quarter of the year.
   All dates are based on the date passed. If no date is passed in the current date and time are used.
   The datetime value to return the information for
   Gets extended date and time information based on the current time
   Get-DateExtended "11/17/2017"
   Gets extended date and time information for a specific date
   A PSObject containing extended values for the date.
      [Parameter(Position = 0, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
      [DateTime]$Date = [DateTime]::Now,
      [switch] $FromUnixTime,

      [ValidateRange(1, 9999)]
      [int] $Year,

      [ValidateRange(1, 12)]
      [int] $Month,

      [ValidateRange(1, 31)]
      [int] $Day,

      [ValidateRange(0, 23)]
      [int] $Hour,

      [ValidateRange(0, 59)]
      [int] $Minute,

      [ValidateRange(0, 59)]
      [int] $Second,

      [ValidateRange(0, 999)]
      [int] $Millisecond,

      [ValidateSet('Date', 'Time', 'DateTime')]
      [string] $DisplayHint
   [DateTimeExtended]::New((Get-Date @PSBoundParameters))