It may look complicated, and it could be greatly simplified. Most conditions are meant to ensure that the variable DinnerTime won't be set every single frame. In dialogue, you'd filter for "local DinnerTime == 1" if dinner is ready or "local DinnerTime == 0" if it isn't. Does that qualify as not "really complicated"? :unsure:
That is the approach my first thought followed before I remembered that there is a Gamehour filter for dialog. Just use multiple greetings one filtered for Global: Gamehour < 19 (player early), for Global: Gamehour >= 22 (player is late) and then one that welcomes the player graciously.
However, such a script might be appropriate for controlling the arrival of the other guest. As for which is better: moving the original or enabling a clone it may depend on whether you want the player to have access to the original's dialog topic. Certainly you could duplicate it for the clone, but if there are any flags that had been triggered in previous conversations with the player that will require additional attention.