Verse13 Sept 2026Free
Real Time Module [Cred. Gorosuke]
#time#module
Shared by Cred1t
Verse · 547 lines
1# Credit: JPN: @GorosukeSan, EN: @GorosukeEN2# A follow on X (Twitter) or credit within the map would be greatly appreciated (optional)3# If you have any bug reports or feature requests, please contact the account mentioned above.45using { /Verse.org/Simulation }67ProjectTimeZone<public>:time_zone = time_zone_bst{}89time_date<public> := struct<concrete>:10 @editable11 Year:int = 01213 @editable14 Month:int = 01516 @editable17 Day:int = 01819 @editable20 Hour:int = 02122 @editable23 Minute:int = 02425 @editable26 Second:int = 02728 @editable29 Millisecond:int = 03031time_span<public> := struct<concrete>:32 @editable33 Years:int = 03435 @editable36 Months:int = 03738 @editable39 Days:int = 04041 @editable42 Hours:int = 04344 @editable45 Minutes:int = 04647 @editable48 Seconds:int = 04950 @editable51 Milliseconds:int = 05253time_zone<public> := class<computes>:54 Time<public>:float5556time_zone_gmt<public> := class<computes>(time_zone):57 Time<override>:float = 0.05859time_zone_bst<public> := class<computes>(time_zone):60 Time<override>:float = 3600.06162time_zone_tokyo<public> := class<computes>(time_zone):63 Time<override>:float = 32400.06465GetCurrentTimeDate<public>()<transacts>:time_date=66 MakeTimeDate(GetSecondsSinceEpoch())6768GetCurrentBritishTimeDate<public>()<transacts>:time_date=69 UtcDate := MakeTimeDate(GetSecondsSinceEpoch())70 if(IsBritishSummerTime[UtcDate]):71 UtcDate + time_span{Hours := 1}72 else:73 UtcDate7475MakeTimeDate<public>(InEpochTime:float)<transacts>:time_date=76 CurrentTime := Max(InEpochTime + ProjectTimeZone.Time, 0.0)7778 EpochTimeSeconds := Floor[CurrentTime] or 079 MilliSeconds := Mod[Floor[CurrentTime * 1000], 1000] or 080 Seconds := Mod[EpochTimeSeconds, 60] or 081 Minutes := Mod[Floor(EpochTimeSeconds / 60), 60] or 082 Hours := Mod[Floor(EpochTimeSeconds / 3600), 24] or 083 Days := Floor(EpochTimeSeconds / 86400) or 08485 var Years:int = 197086 var TotalDays:int = Days87 loop:88 DaysInYear :=89 if(IsLeapYear[Years]):90 36691 else:92 36593 if(TotalDays >= DaysInYear):94 set TotalDays -= DaysInYear95 set Years += 196 else:97 break9899 var Month:int = 0100 loop:101 CurrentDay :=102 if(Month = 2 and IsLeapYear[Years]):103 29104 else:105 DaysInMonth[Month] or 0106107 if(TotalDays >= CurrentDay):108 set TotalDays -= CurrentDay109 set Month += 1110 else:111 break112113 time_date:114 Year := Years115 Month := Month + 1116 Day := TotalDays + 1117 Hour := Hours118 Minute := Minutes119 Second := Seconds120 Millisecond := MilliSeconds121122(InTimeDate:time_date).ToFloat<public>()<transacts>:float=123 var TotalDays:int = 0124 for:125 CurrentYear := 1970..InTimeDate.Year - 1126 do:127 set TotalDays +=128 if(IsLeapYear[CurrentYear]):129 366130 else:131 365132133 for:134 CurrentMonthIndex := 0..InTimeDate.Month - 1 - 1135 CurrentDays := DaysInMonth[CurrentMonthIndex]136 do:137 set TotalDays +=138 if(CurrentMonthIndex = 1 and IsLeapYear[InTimeDate.Year]):139 29140 else:141 CurrentDays142143 var TotalSeconds:float = (TotalDays * 86400.0)144 set TotalSeconds += (InTimeDate.Day - 1) * 86400.0145 set TotalSeconds += InTimeDate.Hour * 3600.0146 set TotalSeconds += InTimeDate.Minute * 60.0147 set TotalSeconds += InTimeDate.Second * 1.0148 set TotalSeconds += InTimeDate.Millisecond * 0.001149 set TotalSeconds -= ProjectTimeZone.Time150 TotalSeconds151152(InTimeDate:time_date).ToBritishTime<public>()<transacts>:float=153 BritishOffset := if(IsBritishSummerTime[InTimeDate]){3600.0}else{0.0}154 InTimeDate.ToFloat() + ProjectTimeZone.Time - BritishOffset155156MakeTimeSpan<public>(InTime:float)<transacts>:time_span=157 CurrentTime := Max(InTime, 0.0)158159 TimeSeconds := Floor[CurrentTime] or 0160 MilliSeconds := Mod[Floor(TimeSeconds * 1000), 1000] or 0161 Seconds := Mod[TimeSeconds, 60] or 0162 Minutes := Mod[Floor(TimeSeconds / 60), 60] or 0163 Hours := Mod[Floor(TimeSeconds / 3600), 24] or 0164 Days := Floor(TimeSeconds / 86400) or 0165166 var Years:int = 0167 var TotalDays:int = Days168 loop:169 DaysInYear :=170 if(IsLeapYear[Years]):171 366172 else:173 365174 if(TotalDays >= DaysInYear):175 set TotalDays -= DaysInYear176 set Years += 1177 else:178 break179180 var Month:int = 0181 loop:182 CurrentDay :=183 if(Month = 2 and IsLeapYear[Years]):184 29185 else:186 DaysInMonth[Month] or 0187188 if(TotalDays >= CurrentDay):189 set TotalDays -= CurrentDay190 set Month += 1191 else:192 break193194 time_span:195 Years := Years196 Months := Month197 Days := TotalDays198 Hours := Hours199 Minutes := Minutes200 Seconds := Seconds201 Milliseconds := MilliSeconds202203(InTimeSpan:time_span).ToFloat<public>()<transacts>:float=204 var TotalDays:int = 0205 for:206 CurrentYear := 0..InTimeSpan.Years - 1207 do:208 set TotalDays +=209 if(IsLeapYear[CurrentYear]):210 366211 else:212 365213214 for:215 CurrentMonthIndex := 0..InTimeSpan.Months - 1216 CurrentDays := DaysInMonth[CurrentMonthIndex]217 do:218 set TotalDays +=219 if(CurrentMonthIndex = 1 and IsLeapYear[InTimeSpan.Years]):220 29221 else:222 CurrentDays223224 var TotalSeconds:float = (TotalDays * 86400.0)225 set TotalSeconds += InTimeSpan.Days * 86400.0226 set TotalSeconds += InTimeSpan.Hours * 3600.0227 set TotalSeconds += InTimeSpan.Minutes * 60.0228 set TotalSeconds += InTimeSpan.Seconds * 1.0229 set TotalSeconds += InTimeSpan.Milliseconds * 0.001230 TotalSeconds231232Equal<public>(X:time_date, Y:time_date)<transacts><decides>:void=233 X.ToFloat() = Y.ToFloat()234235GreaterThan<public>(X:time_date, Y:time_date)<transacts><decides>:void=236 X.ToFloat() > Y.ToFloat()237238EqualOrGreaterThan<public>(X:time_date, Y:time_date)<transacts><decides>:void=239 X.ToFloat() >= Y.ToFloat()240241LessThan<public>(X:time_date, Y:time_date)<transacts><decides>:void=242 X.ToFloat() < Y.ToFloat()243244EqualOrLessThan<public>(X:time_date, Y:time_date)<transacts><decides>:void=245 X.ToFloat() <= Y.ToFloat()246247Distance<public>(X:time_date, Y:time_date)<transacts>:time_span=248 TimeDifference := Abs(X.ToFloat() - Y.ToFloat())249 MakeTimeSpan(TimeDifference)250251operator'+'<public>(X:time_date, Y:time_span)<transacts>:time_date=252 Result := X.ToFloat() + Y.ToFloat()253 MakeTimeDate(Result)254255operator'-'<public>(X:time_date, Y:time_span)<transacts>:time_date=256 Result := Max(X.ToFloat() - Y.ToFloat(), 0.0)257 MakeTimeDate(Result)258259operator'*'<public>(X:time_date, Y:float)<transacts>:time_span=260 Result := X.ToFloat() * Y261 MakeTimeSpan(Result)262263operator'/'<public>(X:time_date, Y:float)<transacts>:time_span=264 Result := X.ToFloat() / Y265 MakeTimeSpan(Result)266267operator'*'<public>(X:time_date, Y:time_span)<transacts>:time_span=268 Result := X.ToFloat() * Y.ToFloat()269 MakeTimeSpan(Result)270271operator'/'<public>(X:time_date, Y:time_span)<transacts>:time_span=272 Result := X.ToFloat() / Y.ToFloat()273 MakeTimeSpan(Result)274275operator'+'<public>(X:time_span, Y:time_span)<transacts>:time_span=276 Result := X.ToFloat() + Y.ToFloat()277 MakeTimeSpan(Result)278279operator'-'<public>(X:time_span, Y:time_span)<transacts>:time_span=280 Result := Max(X.ToFloat() - Y.ToFloat(), 0.0)281 MakeTimeSpan(Result)282283operator'*'<public>(X:time_span, Y:float)<transacts>:time_span=284 Result := X.ToFloat() * Y285 MakeTimeSpan(Result)286287operator'/'<public>(X:time_span, Y:float)<transacts>:time_span=288 Result := X.ToFloat() / Y289 MakeTimeSpan(Result)290291operator'*'<public>(X:time_span, Y:time_span)<transacts>:time_span=292 Result := X.ToFloat() * Y.ToFloat()293 MakeTimeSpan(Result)294295operator'/'<public>(X:time_span, Y:time_span)<transacts>:time_span=296 Result := X.ToFloat() / Y.ToFloat()297 MakeTimeSpan(Result)298299day_of_week<public> := enum:300 Sunday301 Monday302 Tuesday303 Wednesday304 Thursday305 Friday306 Saturday307308GetDayOfWeek<public>(InTimeDate:time_date)<transacts>:day_of_week=309 TimeSeconds := InTimeDate.ToFloat()310 TotalDays := Floor[TimeSeconds / 86400.0] or 0311 DayIndex := Mod[TotalDays + 4, 7] or 0312 DayOfWeeks[DayIndex] or day_of_week.Sunday313314GetDayOfWeekIndex(InDayOfWeek:day_of_week)<computes>:int=315 case(InDayOfWeek):316 day_of_week.Sunday => 0317 day_of_week.Monday => 1318 day_of_week.Tuesday => 2319 day_of_week.Wednesday => 3320 day_of_week.Thursday => 4321 day_of_week.Friday => 5322 day_of_week.Saturday => 6323324GetLastSundayAt<public>(InYear:int, InMonth:int, InHour:int)<transacts>:time_date=325 LastDay := time_date:326 Year := InYear327 Month := InMonth328 Day := DaysInMonth[InMonth - 1] or 0329 Hour := InHour330331 DaysAfterSunday := GetDayOfWeekIndex(GetDayOfWeek(LastDay))332 LastDay - time_span{Days := DaysAfterSunday}333334IsBritishSummerTime<public>(InUtcDate:time_date)<transacts><decides>:void=335 MarchStart := GetLastSundayAt(InUtcDate.Year, 3, 1)336 OctoberEnd := GetLastSundayAt(InUtcDate.Year, 10, 1)337338 EqualOrGreaterThan[InUtcDate, MarchStart] and LessThan[InUtcDate, OctoberEnd]339340DaysInMonth<public>:[]int = array{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}341IsLeapYear<public>(InYear:int)<computes><decides>:void=342 (Mod[InYear, 4] = 0, Mod[InYear, 100] <> 0) or (Mod[InYear, 400] = 0)343344DayOfWeeks<public>:[]day_of_week = array:345 day_of_week.Sunday346 day_of_week.Monday347 day_of_week.Tuesday348 day_of_week.Wednesday349 day_of_week.Thursday350 day_of_week.Friday351 day_of_week.Saturday352353GetEventState<public>(Args:event_args)<transacts>:void=354 CurrentDate := GetCurrentTimeDate()355 GetEventState(CurrentDate, Args)356357GetEventState<public>(Args:event_repeat_args)<transacts>:void=358 CurrentDate := GetCurrentTimeDate()359 GetEventState(CurrentDate, Args)360361event_args<public> := struct:362 StartDate:time_date363 Duration:time_span364365event_repeat_args<public> := struct:366 StartDate:time_date367 Duration:time_span368 Interval:time_span369370event_state<public> := enum:371 NotStarted372 Ongoing373 WaitingForNext374 Ended375376GetEventState<public>(InCurrentDate:time_date, Args:event_args)<transacts>:event_state=377 if:378 LessThan[InCurrentDate, Args.StartDate]379 then:380 event_state.NotStarted381 else if:382 EqualOrGreaterThan[InCurrentDate, Args.StartDate] and LessThan[InCurrentDate, Args.StartDate + Args.Duration]383 then:384 event_state.Ongoing385 else:386 event_state.Ended387388GetEventState<public>(InCurrentDate:time_date, Args:event_repeat_args)<transacts>:event_state=389 if:390 LessThan[InCurrentDate, Args.StartDate]391 then:392 event_state.NotStarted393 else:394 EventStartDate := GetEventStartDate(InCurrentDate, Args)395 if:396 EqualOrGreaterThan[InCurrentDate, EventStartDate] and LessThan[InCurrentDate, EventStartDate + Args.Duration]397 then:398 event_state.Ongoing399 else:400 event_state.WaitingForNext401402GetEventStartDate<public>(InCurrentDate:time_date, Args:event_repeat_args)<transacts>:time_date=403 if:404 LessThan[InCurrentDate, Args.StartDate]405 then:406 Args.StartDate407 else:408 ElapsedTime := Distance(Args.StartDate, InCurrentDate)409 Interval := Args.Duration + Args.Interval410 ElpasedSize := ElapsedTime / Interval411 TempStartTime := Args.StartDate + (Interval * ElpasedSize.ToFloat())412 if:413 EqualOrGreaterThan[InCurrentDate, TempStartTime + Args.Duration]414 then:415 TempStartTime + Interval416 else:417 TempStartTime418419date_type<public> := enum:420 Year421 Month422 Day423 Hour424 Minute425 Second426427(InDateType:date_type).GetTier<public>()<computes>:int=428 case(InDateType):429 date_type.Year => 0430 date_type.Month => 1431 date_type.Day => 2432 date_type.Hour => 3433 date_type.Minute => 4434 date_type.Second => 5435436(InTimeDate:time_date).Override<public>(InDateType:date_type, InValue:int)<transacts>:time_date=437 ArgTier := InDateType.GetTier()438 YearTier := date_type.Year.GetTier()439 MonthTier := date_type.Month.GetTier()440 DayTier := date_type.Day.GetTier()441 HourTier := date_type.Hour.GetTier()442 MinuteTier := date_type.Minute.GetTier()443 SecondTier := date_type.Second.GetTier()444445 time_date:446 Year :=447 if(ArgTier = YearTier):448 InValue449 else if(ArgTier < YearTier):450 0451 else:452 InTimeDate.Year453 Month :=454 if(ArgTier = MonthTier):455 InValue456 else if(ArgTier < MonthTier):457 1458 else:459 InTimeDate.Month460 Day :=461 if(ArgTier = DayTier):462 InValue463 else if(ArgTier < DayTier):464 1465 else:466 InTimeDate.Day467 Hour :=468 if(ArgTier = HourTier):469 InValue470 else if(ArgTier < HourTier):471 0472 else:473 InTimeDate.Hour474 Minute :=475 if(ArgTier = MinuteTier):476 InValue477 else if(ArgTier < MinuteTier):478 0479 else:480 InTimeDate.Minute481 Second :=482 if(ArgTier = SecondTier):483 InValue484 else if(ArgTier < SecondTier):485 0486 else:487 InTimeDate.Second488489(InTimeDate:time_date).Today<public>()<transacts>:time_date=490 time_date:491 Year := InTimeDate.Year492 Month := InTimeDate.Month493 Day := InTimeDate.Day494 Hour := 0495 Minute := 0496 Second := 0497 Millisecond := 0498499(InTimeDate:time_date).Yesterday<public>()<transacts>:time_date=500 InTimeDate.Today() - time_span{Days := 1}501502(InTimeDate:time_date).Tomorrow<public>()<transacts>:time_date=503 InTimeDate.Today() + time_span{Days := 1}504505(InTimeDate:time_date).Today<public>(Hour:int)<transacts>:time_date=506 if(InTimeDate.Hour < Hour):507 InTimeDate.Yesterday() + time_span{Hours := Hour}508 else:509 InTimeDate.Today() + time_span{Hours := Hour}510511(InTimeDate:time_date).Tomorrow<public>(Hour:int)<transacts>:time_date=512 InTimeDate.Today(Hour) + time_span{Days := 1}513514(InTimeDate:time_date).Yesterday<public>(Hour:int)<transacts>:time_date=515 InTimeDate.Today(Hour) - time_span{Days := 1}516517ToString<public>(InTimeDate:time_date)<computes>:string=518 "{InTimeDate.Year}-{InTimeDate.Month}-{InTimeDate.Day} {InTimeDate.Hour}:{InTimeDate.Minute}:{InTimeDate.Second}.{InTimeDate.Millisecond}"519520ToString<public>(InTimeSpan:time_span)<computes>:string=521 "{InTimeSpan.Years} years, {InTimeSpan.Months} months, {InTimeSpan.Days} days, {InTimeSpan.Hours} hours, {InTimeSpan.Minutes} minutes, {InTimeSpan.Seconds} seconds"522523ToString<public>(InDateTime:day_of_week)<computes>:string=524 case(InDateTime):525 day_of_week.Sunday=> "Sunday"526 day_of_week.Monday=> "Monday"527 day_of_week.Tuesday=> "Tuesday"528 day_of_week.Wednesday=> "Wednesday"529 day_of_week.Thursday=> "Thursday"530 day_of_week.Friday=> "Friday"531 day_of_week.Saturday=> "Saturday"532533ToString<public>(InDateType:date_type)<computes>:string=534 case(InDateType):535 date_type.Year=> "Year"536 date_type.Month=> "Month"537 date_type.Day=> "Day"538 date_type.Hour=> "Hour"539 date_type.Minute=> "Minute"540 date_type.Second=> "Second"541542ToString<public>(InEventState:event_state)<computes>:string=543 case(InEventState):544 event_state.NotStarted=> "NotStarted"545 event_state.Ongoing=> "Ongoing"546 event_state.WaitingForNext=> "WaitingForNext"547 event_state.Ended=> "Ended"
Community
★★★★★— · 0 ratings
🪙 How tips and review rewards workExpandCollapse
Tips. You can send 1 to 500 credits from your wallet to the creator as a thank-you. Tips appear in the comments with your name and cannot be undone, unless the snippet is later removed for breaking the rules, in which case they are returned to you.
Reviews. A written 20+ character review with 4 or 5 stars earns the creator 5 credits, paid 7 days later if the review still stands. You earn nothing for reviewing, so say what you really think. Reviews count only from established members: a linked Discord account, a purchase in the store, or an account at least 14 days old with 3+ reviews on snippets by 2+ different creators.