Get-MyAge.ps1


<#PSScriptInfo
 
.VERSION 1.1.4
 
.GUID 72e37320-04fb-4df9-9ba1-815108578691
 
.AUTHOR saw-friendship
 
.COMPANYNAME
 
.COPYRIGHT saw-friendship
 
.TAGS saw-friendship My Age
 
.LICENSEURI
 
.PROJECTURI https://sawfriendship.wordpress.com/
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
 
 
#>


<#
 
.DESCRIPTION
 Measure your Age
 
.LINK
 https://sawfriendship.wordpress.com/2017/07/27/powershell-get-myage
 
.EXAMPLE
 Get-MyAge 1891.05.15
 
.EXAMPLE
 Get-MyAge 1891.05.15 -ToDay 1940.03.10
  
.EXAMPLE
 Get-MyAge 1891.05.15 -SaveMyBirthDay
 
.EXAMPLE
Get-MyAge 1891.05.15
 
 
FullYears : 126
TotalDays : 46098
Age : 126 Y & 77 d
FirstBirthDay : 1891-05-15
FirstBirthDayOfWeek : Friday
FirstBirthDayOfWeekLocal : �������
LastBirthDay : 2017-05-15
LastBirthDayOfWeek : Monday
LastBirthDayOfWeekLocal : �����������
NextBirthDay : 2018-05-15
NextBirthDayOfWeek : Tuesday
NextBirthDayOfWeekLocal : �������
NextBirthDaysRemaining : 288
ToDay : 2017-07-31
 
 
.EXAMPLE
Get-MyAge 1891.05.15 -CultureInfo $([CultureInfo]::GetCultureInfo('en-US'))
 
 
FullYears : 126
TotalDays : 46098
Age : 126 Y & 77 d
FirstBirthDay : 1891-05-15
FirstBirthDayOfWeek : Friday
FirstBirthDayOfWeekLocal : Friday
LastBirthDay : 2017-05-15
LastBirthDayOfWeek : Monday
LastBirthDayOfWeekLocal : Monday
NextBirthDay : 2018-05-15
NextBirthDayOfWeek : Tuesday
NextBirthDayOfWeekLocal : Tuesday
NextBirthDaysRemaining : 288
ToDay : 2017-07-31
 
 
 
#>
 


param(
[datetime]$WasBorn,
[datetime]$ToDay = (Get-Date).Date,
[switch]$SaveMyBirthDay,
[CultureInfo]$CultureInfo = $(Get-Culture)
)
    
    $FilePath = "$env:APPDATA\Microsoft\Windows\PowerShell\Get-MyAge\MyBirthDay"
    
    if($SaveMyBirthDay -and $WasBorn){
        New-Item -Type File -Path $FilePath -Value $WasBorn.ToString('yyyy-MM-dd') -Force | Out-Null
    }
    if(!$WasBorn){
        if((Test-Path $FilePath  -ErrorAction SilentlyContinue)){
            $WasBorn = [datetime]::ParseExact($(Get-Content -Path $FilePath -ErrorAction SilentlyContinue),'yyyy-MM-dd',$NULL).Date
        } else {
            $WasBorn = (Get-Date).AddYears(-18).Date
        }
        
    }
    
    Foreach ($Year in ($WasBorn.Year .. $ToDay.Year)) {
        $BirthDay = $WasBorn.Date | Get-Date -Year $Year
        if($BirthDay -le $ToDay.Date){
            $BirthDays += @($BirthDay)
        }
    }
    [pscustomobject][ordered]@{
        'FullYears' = [int]$($BirthDays.Count - 1)
        'TotalDays' = ($ToDay.Date - $WasBorn.Date).TotalDays
        'Age' = [string]$("$($BirthDays.Count - 1) Y & $( ($ToDay.Date - $BirthDays[-1].Date).TotalDays ) d")
        'FirstBirthDay' = $WasBorn.ToString('yyyy-MM-dd')
        'FirstBirthDayOfWeek' = $WasBorn.DayOfWeek
        'FirstBirthDayOfWeekLocal' = $WasBorn.ToString('dddd',$CultureInfo)
        'LastBirthDay' = $BirthDays[-1].ToString('yyyy-MM-dd')
        'LastBirthDayOfWeek' = $BirthDays[-1].DayOfWeek
        'LastBirthDayOfWeekLocal' = $BirthDays[-1].ToString('dddd',$CultureInfo)
        'NextBirthDay' = $BirthDays[-1].AddYears(1).ToString('yyyy-MM-dd')
        'NextBirthDayOfWeek' = $BirthDays[-1].AddYears(1).DayOfWeek
        'NextBirthDayOfWeekLocal' = $BirthDays[-1].AddYears(1).ToString('dddd',$CultureInfo)
        'NextBirthDaysRemaining' = [int]$(($BirthDays[-1].Date.AddYears(1) - $ToDay.Date).TotalDays)
        'ToDay' = $ToDay.ToString('yyyy-MM-dd')
    }