-
Notifications
You must be signed in to change notification settings - Fork 0
/
Date-Days.ps1
136 lines (130 loc) · 5.13 KB
/
Date-Days.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
$Culture=@(
[PSCustomObject]@{Format='yyyy-MM-dd';Regex='\d{4}\-0?([2-9]|1[0-2]?)\-(0?(3[01]|[12][0-9]|[1-9]))'}
[PSCustomObject]@{Format='yyyy/MM/dd';Regex='\d{4}\/0?([2-9]|1[0-2]?)\/(0?(3[01]|[12][0-9]|[1-9]))'}
[PSCustomObject]@{Format='MM/dd/yyyy';Regex='0?([2-9]|1[0-2]?)\/(0?(3[01]|[12][0-9]|[1-9]))\/\d{4}'}
[PSCustomObject]@{Format='MMM dd, yyyy';Regex='[A-Za-z]{3} (0?(3[01]|[12][0-9]|[1-9])), \d{4}'}
[PSCustomObject]@{Format='dd MMM, yyyy';Regex='(0?(3[01]|[12][0-9]|[1-9])) [A-Za-z]{3}, \d{4}'}
[PSCustomObject]@{Format='MMMM dd, yyyy';Regex='[A-Za-z]{3,9} (0?(3[01]|[12][0-9]|[1-9])), \d{4}'}
[PSCustomObject]@{Format='dd MMMM, yyyy';Regex='(0?(3[01]|[12][0-9]|[1-9])) [A-Za-z]{3,9}, \d{4}'}
[PSCustomObject]@{Format='yyyy, MMM dd';Regex='\d{4}, [A-Za-z]{3} (0?(3[01]|[12][0-9]|[1-9]))'}
[PSCustomObject]@{Format='yyyy, MMMM dd';Regex='\d{4}, [A-Za-z]{3,9} (0?(3[01]|[12][0-9]|[1-9]))'}
)
$months=@(
[PSCustomObject]@{Month='January';Days=31;Number=1}
[PSCustomObject]@{Month='February';Days=28;Number=2}
[PSCustomObject]@{Month='March';Days=31;Number=3}
[PSCustomObject]@{Month='April';Days=30;Number=4}
[PSCustomObject]@{Month='May';Days=31;Number=5}
[PSCustomObject]@{Month='June';Days=30;Number=6}
[PSCustomObject]@{Month='July';Days=31;Number=7}
[PSCustomObject]@{Month='August';Days=31;Number=8}
[PSCustomObject]@{Month='September';Days=30;Number=9}
[PSCustomObject]@{Month='October';Days=31;Number=10}
[PSCustomObject]@{Month='November';Days=30;Number=11}
[PSCustomObject]@{Month='December';Days=31;Number=12}
)
function Identify {
PARAM (
[Parameter(ValueFromPipeline=$true, Mandatory=$true, Position=0)] [System.String] $string,
[Parameter(ValueFromPipeline=$true, Mandatory=$true, Position=1)] [System.String] $regex
)
$string -eq ($string| Select-String -pattern $regex).matches.value
}
function Leapdays {
PARAM (
[Parameter(ValueFromPipeline=$true, Mandatory=$true, Position=0)] $date
)
Process {
[int]$years=$date.year
if ($date.month -le 2) { $years-=1}
if ($years % 4 -eq 0) {$leap=$years/4}
else {while ($years % 4 -ne 0) {$years-=1}
$leap=$years/4}
if ($years % 100 -eq 0) {$century=$years/100}
else {while ($years % 100 -ne 0) {$years-=4}
$century=$years/100}
if ($years % 400 -eq 0) {$cycle=$years/400}
else {while ($years % 400 -ne 0) {$years-=100}
$cycle=$years/400}
$leap=$leap-$century+$cycle
$leap
}
}
function ParseDate {
Param(
[Parameter(ValueFromPipeline=$true, Mandatory=$true, Position=0)] $string,
[Parameter(ValueFromPipeline=$true, Mandatory=$true, Position=1)] $format
)
if ($format -eq 'yyyy-MM-dd'){
$Year=$string.Split("-")[0] -as [int]
$Month=$string.Split("-")[1] -as [int]
$Day=$string.Split("-")[2] -as [int]
}
elseif ($format -eq 'yyyy/MM/dd'){
$Year=$string.Split("/")[0] -as [int]
$Month=$string.Split("/")[1] -as [int]
$Day=$string.Split("/")[2] -as [int]
}
elseif ($format -eq 'MM/dd/yyyy'){
$Year=$string.Split("/")[2] -as [int]
$Month=$string.Split("/")[0] -as [int]
$Day=$string.Split("/")[1] -as [int]
}
elseif ($format -eq 'MMM dd, yyyy'){
$string=$string -replace ","
$Year=$string.Split( )[2] -as [int]
$Month=($months | Where-Object{$_.Month -like $string.split( )[0]+"*"}).number -as [int]
$Day=$string.Split( )[1] -as [int]
}
elseif ($format -eq 'dd MMM, yyyy'){
$string=$string -replace ","
$Year=$string.Split( )[2] -as [int]
$Month=($months | Where-Object{$_.Month -like $string.split( )[1]+"*"}).number -as [int]
$Day=$string.Split( )[0] -as [int]
}
elseif ($format -eq 'MMMM dd, yyyy'){
$string=$string -replace ","
$Year=$string.Split( )[2] -as [int]
$Month=($months | Where-Object{$_.Month -eq $string.split( )[0]}).number -as [int]
$Day=$string.Split( )[1] -as [int]
}
elseif ($format -eq 'dd MMMM, yyyy'){
$string=$string -replace ","
$Year=$string.Split( )[2] -as [int]
$Month=($months | Where-Object{$_.Month -eq $string.split( )[1]}).number -as [int]
$Day=$string.Split( )[0] -as [int]
}
elseif ($format -eq 'yyyy, MMM dd'){
$string=$string -replace ","
$Year=$string.Split( )[0] -as [int]
$Month=($months | Where-Object{$_.Month -like $string.split( )[1]+"*"}).number -as[int]
$Day=$string.Split( )[2] -as [int]
}
elseif ($format -eq 'yyyy, MMMM dd'){
$string=$string -replace ","
$Year=$string.Split( )[0] -as [int]
$Month=($months | Where-Object{$_.Month -eq $string.split( )[1]}).number -as [int]
$Day=$string.Split( )[2] -as [int]
}
[PSCustomObject]@{Year=$Year;Month=$Month;Day=$Day}
}
function Date-Days {
PARAM(
[Parameter(ValueFromPipeline=$true, Mandatory=$true)] $date
)
for ($i=0;$i -lt $Culture.count;$i++) {
if (Identify $date $Culture[$i].Regex) {
$date=ParseDate $date $Culture[$i].Format
break
}
}
$month=0
for ($i=0;$i -lt $date.month-1;$i++) {
$month+=$months[$i].Days
}
$totaldays=($date.year-1)*365+$(Leapdays $date)+$month+$date.day
return $totaldays
}
$date=Read-Host "Input Date to Convert"
Write-Host $date
Date-Days $date