Você quer ser chato ou simples?
Se quiser ser chato, você pode verificar qual é a latitude e longitude do seu cliente (isso você pode verificar pela sua cidade, embora existam cidades tão grandes, como Altamira, no Pará, que tenham intervalos de longitude consideráveis), e ver em que hora o sol se levanta ou se põe. Isso é coisa para chatos e preciosistas mesmo - fora que você tem de levar em conta se seu cliente atende ao horário de verão (São Paulo, Rio etc.) ou se não atende (Bahia, Pernambuco etc.)
Se quiser ser simples, pode considerar que das 06:00 às 12:00 é “bom dia”, das 12:01 às 18:00 é “boa tarde” e das 00:00 às 05:59, além de 18:01 às 23:59, é “boa noite”. Obviamente que você vai ver que em determinados dias e estações 18:00 não se parece nem um pouco com “boa noite”, mas isso é só um detalhe. Talvez alguém se incomode com o fato de receber um “boa noite” no Acre (2 horas de diferença) quando seu servidor está no Rio de Janeiro; nesse caso, deixe o “boa noite” em uma função Javascript, para poder usar o horário do browser (não o do servidor).