It is strange that dates in a log file are not sorted, unless they are starting timestamps written by different threads when finishing their long running job. Anyway, why are you swapping dates based only on years and months?
I guess that references are used only because of the dates swap. Your date strings are sortable, so why don't do it before splitting them? Then, you can use the arrays directly.
You need speed. Try splitting with /[-: ]/ or /\D+/ (as it was said, "PM" is irrelevant because your hours are in 00 to 23 range).