Public/ConvertFrom-ALHDateTime.ps1

<#PSScriptInfo
 
.VERSION 1.1.0
 
.GUID 15cfc452-2c60-428e-9a06-1fc3bd4e9f9f
 
.AUTHOR Dieter Koch
 
.COMPANYNAME
 
.COPYRIGHT (c) 2021-2023 Dieter Koch
 
.TAGS
 
.LICENSEURI https://github.com/admins-little-helper/ALH/blob/main/LICENSE
 
.PROJECTURI https://github.com/admins-little-helper/ALH
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
    1.0.0
    Initial release
 
    1.1.0
    Added pipeline support. Set defaut value to current date/time for parameter 'DateTime'
 
#>



<#
 
.DESCRIPTION
Contains a function to convert a local date/time to miliseconds since 1970 or milliseconds since 1601 or ticks since 1601.
 
.LINK
https://github.com/admins-little-helper/ALH
 
.LINK
https://docs.microsoft.com/en-US/troubleshoot/windows-server/identity/useraccountcontrol-manipulate-account-properties
 
#>



function ConvertFrom-ALHDateTime {
    <#
    .SYNOPSIS
    Converts a local date/time to miliseconds since 1970 or milliseconds since 1601 or ticks since 1601.
 
    .DESCRIPTION
    Converts a local date/time to miliseconds since 1970 or milliseconds since 1601 or ticks since 1601.
 
    .PARAMETER DateTime
    Date to convert. Defaults to current date/time.
 
    .EXAMPLE
    ConvertFrom-ALHDateTime
 
    DateTime MillisecondsSince1970 MillisecondsSince1601 TicksSince1601
    -------- --------------------- --------------------- --------------
    11.11.2022 21:14:49 1668201289484 13312674889484 133126748894840000
 
    This example shows how to convert the current date/time to MillisecondsSince1970, MillisecondsSince1601 and TicksSince1601.
 
    .EXAMPLE
    ConvertFrom-ALHDateTime -DateTime "11.11.2011 11:11:11"
 
    DateTime MillisecondsSince1970 MillisecondsSince1601 TicksSince1601
    -------- --------------------- --------------------- --------------
    11.11.2011 11:11:00 1321009860000 12965483460000 129654834600000000
 
    This example shows how to convert a date as string to MillisecondsSince1970, MillisecondsSince1601 and TicksSince1601.
    Note that in this example PowerShell automatically casts the String value to a DateTime value. Use this carefully to make sure the
    date/time format matches your local date time format.
 
    .INPUTS
    System.DateTime
 
    .OUTPUTS
    PSCustomObject
 
    .NOTES
    Author: Dieter Koch
    Email: diko@admins-little-helper.de
 
    .LINK
    https://github.com/admins-little-helper/ALH/blob/main/Help/ConvertFrom-ALHDateTime.txt
    #>


    [cmdletbinding()]
    param
    (
        [Parameter(Position = 0, ValueFromPipeline, ValueFromPipelineByPropertyName)]
        [DateTime[]] 
        $DateTime = @(, (Get-Date))
    )

    begin {
        $DT1970 = Get-Date -Date "1970-01-01T00:00:00"
        $DT1601 = Get-Date -Date "1601-01-01T00:00:00"
    }

    process {
        foreach ($DateTimeElement in $DateTime) {
            try {
                [int64]$MillisecondsSince1970 = ($DateTimeElement - $DT1970).TotalMilliseconds
                [int64]$MillisecondsSince1601 = ($DateTimeElement - $DT1601).TotalMilliseconds
            }
            catch {
                $_
            }

            $DateTimeConverted = [PSCustomObject]@{
                DateTime              = $DateTimeElement
                MillisecondsSince1970 = $MillisecondsSince1970
                MillisecondsSince1601 = $MillisecondsSince1601
                TicksSince1601        = $MillisecondsSince1601 * 10000
            }

            $DateTimeConverted
        }
    }
}


#region EndOfScript
<#
################################################################################
################################################################################
#
# ______ _ __ _____ _ _
# | ____| | | / _| / ____| (_) | |
# | |__ _ __ __| | ___ | |_ | (___ ___ _ __ _ _ __ | |_
# | __| | '_ \ / _` | / _ \| _| \___ \ / __| '__| | '_ \| __|
# | |____| | | | (_| | | (_) | | ____) | (__| | | | |_) | |_
# |______|_| |_|\__,_| \___/|_| |_____/ \___|_| |_| .__/ \__|
# | |
# |_|
################################################################################
################################################################################
# created with help of http://patorjk.com/software/taag/
#>

#endregion