Cron bu durumda daha etkili bir yöntem olacaktır.

if - else ile elbette yapılabilir. Lakin bu kodun çalışması için triggerlanması lazım.

if - else ile yapmak isterseniz en iyi mantık şu şekilde olacaktır;

arkadaşların dediği gibi, veritabanına bir published_date kısmı oluşturun. veriyi timestamp olarak yolladığınızı varsayalım. Ek olarak birde published kısmı oluşturun. 1 - 0 veya true false adında değerler girin.

Şuanki timestamp olarak bunu baz alıyorum: 1600123865 ( time() )
Yayınlayacağınız tarih içinse: 1600210217

/* $publish_status değişkeni ile ilgili postun yayınlanıp yayınlanmadıgını, published değerini kontrol ettiğinizi varsayıyorum. */

/* $publish_time değişkeni ile ilgili postun published_date değerini veritabanından aldığınızı varsayıyorum. Tabi $publish_status eğer 0 (yayınlanmamış) ise. */


if ( $publish_status == false && time() > $publish_time ) {
//burada ilgili postun veritabanındaki published değerini 1 olarak ayarlayacağınız, yani yayına alacağınız kod bloğu.
}
Sonrasında $publish_status true olduğu için if bloğunuz çalışmayacak.

Yapınızı bilmesemde bunu bir döngü içerisinde yaptığınızı varsayıyorum, döngü içerisinde kullanım yaparsanız ilgili amacınıza ulaşırsınız.

Elbette tavsiyem cron ile yapmanızdan yana. Çünkü siz veya bir başkası siteyi ziyaret etmedikçe ( kod tetiklenmedikçe ) çalışmayacak.