@@ -690,41 +690,16 @@ protected function validateAndUpdateContest(Event $event, EventData $data): void
690690 ->getRepository (Contest::class)
691691 ->find ($ this ->getSourceContestId ());
692692
693- // We need to convert the freeze to a value from the start instead of
694- // the end so perform some regex magic.
695- $ duration = $ data ->duration ;
696- $ freeze = $ data ->scoreboardFreezeDuration ;
697- $ reltimeRegex = '/^(-)?(\d+):(\d{2}):(\d{2})(?:\.(\d{3}))?$/ ' ;
698- preg_match ($ reltimeRegex , $ duration , $ durationData );
699-
700- $ durationNegative = ($ durationData [1 ] === '- ' );
701- $ fullDuration = $ durationNegative ? $ duration : ('+ ' . $ duration );
693+ // We need to convert the freeze to a value from the start instead of the end.
694+ $ duration = $ data ->duration ;
695+ $ durationInSeconds = Utils::relTimeToSeconds ($ duration );
696+ $ fullDuration = Utils::relTime ($ durationInSeconds , floor: true , includePlus: true );
697+ $ freeze = $ data ->scoreboardFreezeDuration ;
702698
703699 if ($ freeze !== null ) {
704- preg_match ($ reltimeRegex , $ freeze , $ freezeData );
705- $ freezeNegative = ($ freezeData [1 ] === '- ' );
706- $ freezeHourModifier = $ freezeNegative ? -1 : 1 ;
707- $ freezeInSeconds = $ freezeHourModifier * (int )$ freezeData [2 ] * 3600
708- + 60 * (int )$ freezeData [3 ]
709- + (double )sprintf ('%d.%03d ' , $ freezeData [4 ], $ freezeData [5 ] ?? 0 );
710- $ durationHourModifier = $ durationNegative ? -1 : 1 ;
711- $ durationInSeconds = $ durationHourModifier * (int )$ durationData [2 ] * 3600
712- + 60 * (int )$ durationData [3 ]
713- + (double )sprintf ('%d.%03d ' , $ durationData [4 ], $ durationData [5 ] ?? 0 );
714- $ freezeStartSeconds = $ durationInSeconds - $ freezeInSeconds ;
715- $ freezeHour = floor ($ freezeStartSeconds / 3600 );
716- $ freezeMinutes = floor (($ freezeStartSeconds % 3600 ) / 60 );
717- $ freezeSeconds = floor (($ freezeStartSeconds % 60 ) / 60 );
718- $ freezeMilliseconds = $ freezeStartSeconds - floor ($ freezeStartSeconds );
719-
720- $ fullFreeze = sprintf (
721- '%s%d:%02d:%02d.%03d ' ,
722- $ freezeHour < 0 ? '' : '+ ' ,
723- $ freezeHour ,
724- $ freezeMinutes ,
725- $ freezeSeconds ,
726- $ freezeMilliseconds
727- );
700+ $ freezeInSeconds = Utils::relTimeToSeconds ($ freeze );
701+ $ freezeStartSeconds = $ durationInSeconds - $ freezeInSeconds ;
702+ $ fullFreeze = Utils::relTime ($ freezeStartSeconds , floor: true , includePlus: true );
728703 } else {
729704 $ fullFreeze = null ;
730705 }
@@ -753,8 +728,8 @@ protected function validateAndUpdateContest(Event $event, EventData $data): void
753728 $ toCheck = [
754729 'start_time_enabled ' => true ,
755730 'start_time_string ' => $ startTime ->format ('Y-m-d H:i:s ' ) . $ timezoneToUse ,
756- 'end_time_string ' => preg_replace ( ' /\.000$/ ' , '' , $ fullDuration) ,
757- 'freeze_time_string ' => preg_replace ( ' /\.000$/ ' , '' , $ fullFreeze) ,
731+ 'end_time_string ' => $ fullDuration ,
732+ 'freeze_time_string ' => $ fullFreeze ,
758733 ];
759734 } else {
760735 $ toCheck = [
0 commit comments