Firstly, given that you have put "or vector(0)", I think you may misunderstand how alerting works in Prometheus.
PromQL expressions return vectors - a set of 0 or more values. In an alerting expression, the alert is treated as firing if the vector is non-empty - i.e. it contains 1 or more values, regardless of what those values actually are. Therefore, the expression vector(0) gives an alert which fires all of the time, which isn't very useful.
Next, PromQL comparison operators are filters, not booleans. Suppose you have the following metrics in your database:
node_disk_space{instance="a"} 100
node_disk_space{instance="b"} 200
node_disk_space{instance="c"} 300
The PromQL expression "node_disk_space > 150" returns a vector of 2 values:
node_disk_space{instance="b"} 200
node_disk_space{instance="c"} 300
That is, the expression "node_disk_space" returns a vector of all metrics with that metric name, and "node_disk_space > 150" filters it down to just those metrics whose value is over 150. It does not return a "true" or "false" value (or values).
Similarly, "and/or/unless" don't work like booleans either. The expression "node_disk_space > 150 or vector(0)" will return the following:
node_disk_space{instance="b"} 200
node_disk_space{instance="c"} 300
{} 0
In this case you get a vector of 3 values. The explanation of how "or" works is here:
It's another vector operator, which matches the label sets of the LHS and RHS.
Now, let me go back to your original problem about time periods. I think you're approach this the wrong way.
I believe the business rule amounts to this: "I only want to receive alerts on this condition if the time falls between 8:30am and 9pm". It's not that the problem doesn't happen outside business hours; it's that the problem isn't important enough to send a notification outside of business hours.
Therefore, the right way to handle this is with time periods within alertmanager, to control when the alerts are sent - not within the PromQL expression which determines whether there is a problem or not.
The way you do this is with time intervals in alertmanager routing trees. See:
Not only is this far easier to implement than attempting to do it in PromQL, it's also more flexible - for example you can have the same alert (from the same PromQL alerting rule) sent to different groups depending on the time of day.
Note that you can add labels to your alert in the alerting rule to categorise the alert, and you can match on those labels in your alert routing tree. This gives you further flexibility to categorise your alerts in whatever way is useful to you.