On a site whose content is static, this is fairly easy - have the identical site on both old and new locations during the changeover period. A gotcha to be aware of is https/SSL certificates - particularly if running something like certbot you will need to ensure certificate validity on both systems during the changeover window.
On a dynamic site, this is a LOT harder. Depending in how you handle sessions you may be able to rig up some kind of replication, or take a view that you can disconnect everyone as long as they can immediately reconnect (or some other solution). The trick here is to make use of a reverse proxy/load balancer. There are different ways to do this - one might be to migrate the site to a preconfigured load balancer, then point the load balancer to new IP, then again update DNS, then remove load balancer. There are plenty of variations on the theme, including turning the old system into a reverse proxy for the new system in the interim.
Another possibility with a different set of challenges could be to migrate the system to a new domain, then at the appointed time redirect from old to new URL, then move traffic back to old URL after DNS updating is done.
An important aside - if a short period of downtime for current users is OK you can reduce TTLs in DNS to 60 seconds (lower is not a good idea) - in that way the vast majority of users will be switched from old to new server in a minute or 2.