Public/Get-Unixtime.ps1



Function Get-Unixtime {
    
    <#
    .SYNOPSIS
      Shows the current time or a input datetime as a unix timestamp
 
    .DESCRIPTION
      Unixtime is always UTC
 
    .PARAMETER inMilliseconds
      Just use this to parameter [switch] if you want to return the timestamp with milliseconds
 
    .PARAMETER timestamp
      Just input a [DateTime] object to calculate another timestamp
 
    .NOTES
    Name: Get-Unixtime.ps1
    Author: florian.von.bracht@apteco.de
    DateCreated:
    DateUpdated: 2022-10-28
    Site: https://github.com/gitfvb/
 
    .LINK
    Site: https://github.com/gitfvb/AptecoHelperScripts/blob/master/functions/Time/Get-Unixtime.ps1
 
    .EXAMPLE
      # Shows the current unix timestamp
      Get-Unixtime
 
    .EXAMPLE
      # Shows the current unix timestamp with Millseconds
      Get-Unixtime -InMilliseconds
 
    .EXAMPLE
      # Shows the unix timestamp with milliseconds from two days ago
      Get-Unixtime -InMilliseconds -Timestamp ( Get-Date ).AddDays(-2)
 
    #>


    [cmdletbinding()]
    param(
         [Parameter(Mandatory=$false,ValueFromPipeline)][DateTime] $Timestamp = ( [Datetime]::now )
        ,[Parameter(Mandatory=$false)][switch] $InMilliseconds = $false
    )

    Begin {

        $multiplier = 1

        if ( $InMilliseconds ) {
            $multiplier = 1000
        }

    }

    Process {

        $tsUtc = $Timestamp.ToUniversalTime()
        $tsFormatted = Get-Date $tsUtc -UFormat %s
        $unixtime = [UInt64]([double]::Parse($tsFormatted) * $multiplier)
        if ( $InMilliseconds ) {
          $unixtime += $tsUtc.Millisecond
        }

        return $unixtime

    }

    End {

    }

}