Time2() ja Date2()
Author: valtzu
Added: 25. huhtikuuta 2011 kello 21.37
Edited: 5. lokakuuta 2013 kello 15.34
Category: Järjestelmä
Description
Code
Select all1 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 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 | // Aikafunktiot by Valtzu (17.12.2006)
// Korjattu 18.12.2006
// Muokattu 10.2.2007
// 09.07.2007: Systeemi muutettu käyttämään UnixTimestamppia
// 19.08.2007: Lisätty tavaraa...
// 01.01.2008: Bugikorjaus
// 02.01.2008: Vihdoin ja viimein usean työtunnin tuloksena sain lisättyä viikkonumeron! (W)
// 05.01.2008: Date2()-funktiota optimoitu, enää funktio ei ole niin raskas
// : Samalla sain pois myös ylimääräisen __Replace2()-funktion
// 05.10.2013: Korjattu \\-bugi Date2-funktiossa (kiitos Jare & VesQ)
// Esimerkki
Repeat
Text 0,0, Date2("l jS \of F \i\n Y h:i:s A")
year = Date2("Y") // Vuosi
month = Date2("n") // Kuukausi
day = Date2("j") // Päivä
// Luodaan aikaleima tästä päivästä, klo 00:00:00
today = Time2(day, month, year, 00, 00, 00)
// Luodaan aikaleima seuraavan vuoden kesäkuun ensimmäisestä päivästä
june = Time2(1, 6, (year+1), 00, 00, 00)
Text 10,40,"Vuoden "+(year+1)+" kesäkuun alkuun "+((june-today)/(24*3600))+" päivää"
Text 20,80,Date2("j.n.Y H:i:s")
Text 30,120,"Your current FPS is "+FPS()
DrawScreen
Forever
////--- FUNKTIOT ---////
// Aikaleimafunktio, palauttaa kokonaisluvun nykyisestä ajasta. Esim. 1183966740
// Funktiolle voi myös antaa parametreinä jonkun muun ajan kuin nykyisen,
// järjestys on päivä,kuukausi,vuosi,tunnit,minuutit,sekuntit
Function Time2(pp=0,kk=0,vvvv=0,tt=0,mm=0,ss=0)
If pp=0 Or kk=0 Or vvvv=0 Then
now = 1
pvm$ = Date()
pp = Left(pvm,2)
vvvv = Right(pvm,4)
Select Lower(Mid(pvm,4,3))
Case "jan" : kk = 1
Case "feb" : kk = 2
Case "mar" : kk = 3
Case "apr" : kk = 4
Case "may" : kk = 5
Case "jun" : kk = 6
Case "jul" : kk = 7
Case "aug" : kk = 8
Case "sep" : kk = 9
Case "oct" : kk = 10
Case "nov" : kk = 11
Case "dec" : kk = 12
End Select
EndIf
stamp = (vvvv-1970)*(365*(24*3600))
For i=1970 To vvvv-1
If (i Mod 400 = 0) Or (i Mod 4 = 0 And i Mod 100 <> 0) Then stamp=stamp+(3600*24)
Next i
karkausvuosi=(vvvv Mod 400 = 0) Or (vvvv Mod 4 = 0 And vvvv Mod 100 <> 0)
kkdata$="31"+(28+karkausvuosi)+"31303130313130313031"
For i=1 To kk-1
päiviä=päiviä+Int(Mid(kkdata,i*2-1,2))
Next i
päiviä = päiviä+pp-1
stamp = stamp + päiviä*(3600*24)
If now Then
aika$ = Time()
tt = Int(Left(aika,2))
mm = Int(Mid(aika,4,2))
ss = Right(aika,2)
EndIf
stamp = stamp + ((tt-3)*3600)+(mm*60)+ss
Return stamp
End Function
// Funktio toimii samaan tapaan kuin php:ssä date-funktio
// Katso ohjeet http://fi.php.net/manual/en/function.date.php
// Merkit, jotka muunnetaan ajaksi ovat A,a,D,d,F,G,g,H,h,i,j,L,l,M,m,N,n,o,t,S,s,U,Y,y,W,w,z
// Takakenoviiva (\) minkä tahansa merkin edessä estää merkin muuntamisen ajaksi
Function Date2(muoto$="j.n.Y H:i:s",aikaleima=-99999999)
If aikaleima=-99999999 Then aikaleima=Time2()
original=aikaleima : aikaleima=aikaleima+3*3600
vvvv=1970
While True
asd=asd+365*24
If asd*3600>aikaleima Then Exit
If (vvvv Mod 400 = 0) Or (vvvv Mod 4 = 0 And vvvv Mod 100 <> 0) Then ta=ta+(3600*24) Then asd=asd+24
vvvv+1
Wend
karkausvuosi=(vvvv Mod 400 = 0) Or (vvvv Mod 4 = 0 And vvvv Mod 100 <> 0)
pp = ((aikaleima-ta) Mod (365*24*3600))/(3600*24)+1
pt = pp
kkdata$="31"+(28+karkausvuosi)+"31303130313130313031"
While 1
kk+1
tmp=Int(Mid(kkdata,kk*2-1,2))
If pp>tmp Then pp=pp-tmp Else Exit
Wend
tt = (aikaleima/3600) Mod 24
mm = (aikaleima/60) Mod 60
ss = aikaleima Mod 60
ampm$ = Replace(Replace(Str((tt>11)),"0","am"),"1","pm")
wd$ = Str((aikaleima/(24*3600) + 4) Mod 7)
If InStr(muoto,"D") Or InStr(muoto,"l") Then
If wd=0 Then wds$="Sunday"
If wd=1 Then wds$="Monday"
If wd=2 Then wds$="Tuesday"
If wd=3 Then wds$="Wednesday"
If wd=4 Then wds$="Thursday"
If wd=5 Then wds$="Friday"
If wd=6 Then wds$="Saturday"
EndIf
If InStr(muoto,"M") Or InStr(muoto,"F") Then
If kk=1 Then ws$="January"
If kk=2 Then ws$="February"
If kk=3 Then ws$="March"
If kk=4 Then ws$="April"
If kk=5 Then ws$="May"
If kk=6 Then ws$="June"
If kk=7 Then ws$="July"
If kk=8 Then ws$="August"
If kk=9 Then ws$="September"
If kk=10 Then ws$="October"
If kk=11 Then ws$="November"
If kk=12 Then ws$="December"
EndIf
If InStr(muoto,"W") Or InStr(muoto,"o") Then
firstday=(vvvv-1970+(ta/(3600*24))-4) Mod 7
firstday=firstday+(firstday<0)*7+1
pyl=((vvvv-1) Mod 400=0) Or ((vvvv-1) Mod 4=0 And (vvvv-1) Mod 100>0)
wkd=(Int(wd)=0)*7+(Int(wd)>0)*(Int(wd))
If pt <= (8-firstday) And firstday>4 Then
y=vvvv-1
week=52+(firstday=5 Or (firstday=6 And pyl))
Else
y=vvvv
EndIf
If ((365+(y=vvvv And karkausvuosi))-pt) < (4-wkd) Then y=vvvv+1 Then week=1
If y=vvvv Then week=(pt+(7-wkd)+(firstday-1))/7-(firstday>4)
weekn$=String("0",2-Len(Str(week)))+Str(week):weeky=y
EndIf
tm = Right(Str(pp),1)
out$="":d$=""
For i=1 To Len(muoto)
b$=Mid(muoto,i,1)
If b2$="\" Or b="\" Then
If b="\" And b2<>"\" Then d="" Else d=b : b=""
Else
Select b
Case "A":d=Upper(ampm)
Case "a":d=ampm
Case "D":d=wds
Case "d":d=String("0",2-Len(Str(pp)))+pp
Case "F":d=Left(ws,3)
Case "G":d=String("0",2-Len(Str(tt)))+tt
Case "g":d=(tt-((tt>12)*12))
Case "H":d=String("0",2-Len(Str(tt)))+tt
Case "h":d=String("0",Int((tt-((tt>12)*12)<10)))+Str(tt-((tt>12)*12))
Case "i":d=String("0",2-Len(Str(mm)))+mm
Case "j":d=pp
Case "L":d=karkausvuosi
Case "l":d=Left(wds,3)
Case "M":d=ws
Case "m":d=String("0",2-Len(Str(kk)))+kk
Case "N":d=((Int(wd)=0)*7+(Int(wd)<>0)*(Int(wd)+1))
Case "n":d=kk
Case "o":d=weeky
Case "t":d=Mid(kkdata,kk*2-1,2)
Case "S":d=String("st",(tm=1))+String("nd",(tm=2))+String("rd",(tm=3))+String("th",(tm>3))
Case "s":d=String("0",2-Len(Str(ss)))+ss
Case "U":d=original
Case "Y":d=vvvv
Case "y":d=Right(Str(vvvv),2)
Case "W":d=weekn
Case "w":d=wd
Case "z":d=pt
Default :d=b
End Select
EndIf
out=out+d : b2$=b
Next i
Return out
End Function
|
Comments
#37 Sent by: VesQ, 27. elokuuta 2012 kello 17.38
Korjasinpa huvikseni tämän funkkarin toimimaam myös kenoviivojen escapettamisen kanssa.
http://www.cbrepository.com/pastebin/3l/
#38 Sent by: VesQ, 27. elokuuta 2012 kello 17.41
Oikeastaan tämä onkin vähän elegantimpi tapa ratkaista asia.
http://www.cbrepository.com/pastebin/3m/
Muutin vain
If b="\" And b2<>"\" Then d="" Else d=b
seuraavaksi
If b="\" And b2<>"\" Then d="" Else d=b : b=""
#34 Sent by: Jare, 5. heinäkuuta 2012 kello 12.56
Tätä olen käyttänyt monesti ja tämä on todella hyödyllinen, mutta nyt törmäsin bugiin: kenoviivan escapettaminen toisella kenoviivalla ei toimi:
MakeError Date2("Y\\m\\d")
Tulos: 2012\m\d
(Pitäisi olla 2012\07\05)