Send a data on a specific time from NodeMCU to Node-Red via MQTT using RTC

Okay, so i've try a simple code how to send a data on specific time.

here's the code

#include <RTClib.h> // for the RTC
#include <ESP8266WiFi.h>
#include <PubSubClient.h>

// Instance of the class for RTC
RTC_DS1307 rtc;

// Define check in time
const int ONHour1 = 11;
const int ONMinute1 = 10;
const int OFFHour1 = 11;
const int OFFMinute1 = 12;

int CurrentHour;
int CurrentMinute;

const char* ssid = "*****";
const char* password = "*****";
const char* mqtt_server = "broker.mqtt-dashboard.com";
int mqtt_port = 1883;
WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
  Serial.begin(115200);
  rtc.begin();
  setup_wifi();
  client.setServer(mqtt_server, mqtt_port);
}

void setup_wifi(){
  delay(10);
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() !=WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Wifi Connected");
  Serial.println("IP Address: ");
  Serial.println(WiFi.localIP());
}

void reconnect(){
  Serial.println("In Reconnect...");
  while (!client.connected()){
    Serial.println("Attempting MQTT Connection...");
    if (client.connect("ESP8266Client")){
      Serial.println("connect");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" trying again in 5 seconds");
      delay(5000);
    }
  }
}

void loop() {
 DateTime now = rtc.now();
   // Save check in time;
    CurrentHour = now.hour();
    CurrentMinute = now.minute();
  Serial.println(CurrentHour);
  Serial.println(CurrentMinute);
  if((CurrentHour==ONHour1) && (CurrentMinute == ONMinute1)){
    client.publish("text/data", "pertama berhasil");
    }
if((CurrentHour==OFFHour1) && (CurrentMinute == OFFMinute1)){
      client.publish("text/data", "kedua berhasil");
    }
//      if((CurrentHour==ONHour2) && (CurrentMinute == ONMinute2)){
//    digitalWrite(relay2,HIGH);
//    Serial.println("LIGHT ON");
//    }
//if((CurrentHour==OFFHour2) && (CurrentMinute == OFFMinute2)){
//      digitalWrite(relay2,LOW);
//      Serial.println("LIGHT OFF");
//    }
if (!client.connected()){
    reconnect();
  }
  client.loop();
  delay(100);
}

its working but the delay is very late, like about 1-3 minutes.