some questions i have about GSM and RTC modules and nano freezing

Hello, I’ve been trying to make a basic home system that does stuff when I send SMS (but I’m trying Serial only first on the PC)

but for some reason, it freezes my Nano after 1 successful try…

my code is basically this, when i send date over the serial monitor, it shows me once, then freezes

#include <Wire.h>
#include "RTClib.h"
#include <Time.h>
#include <TimeLib.h>
#include <SoftwareSerial.h> 
RTC_DS1307 rtc;

String message = "";
void setup()
{
  Serial.begin(9600);

  if (! rtc.begin()) {
    Serial.println("RTC not availiable");
    while (1);
  }
}
  void loop ()
  {
    message = ReadSMS();
    if (message == "date")
    {
      Date();
    }
  }

  String ReadSMS()
  {
    while (Serial.available() > 0)
    {
      return Serial.readStringUntil("\n");
    }
    return "Error";
  }

  String Date()
  {
    DateTime now = rtc.now();
    Serial.print(now.day(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.year(), DEC);
    Serial.print(" ");
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
  }

I also would like to know if it’s possible to set a “default” number for sending SMS so I don’t have to type it all the time

and how would I save in eeprom a date so I could compare it later to the current time (ex: my function if its 8am its true, so it would check with the current time and send me the bool)

being more especific with the GSM module, no i need to follow exactly like the rules to send a sms? id like to make a separate function to only edit the number it should send sms to

Get rid of the String class. It fragments the memory in no time and sooner or later you don't have enough RAM anymore.

The Date() function is declared to return a String but it doesn't.

You include SoftwareSerial although you don't use it (fortunately).

Hmm ok,
what else would I use? i thought since it had colons and slashes I had to use String
I'm trying with int seems to be working for now

the software serial is for the future GSM 800l module

is it possible to make a single serial print with all the prints i'm trying to do?
something like "Serial.print(now.day(), now.month())" etc

what else would I use? i thought since it had colons and slashes I had to use String

Use c-type strings (character arrays). That way you allocate a fixed size buffer for it but you have to take care that it doesn't overrun.

the software serial is for the future GSM 800l module

You should not use SoftwareSerial in a productive environment. It's OK to debug but the running version should use the hardware serial interface (that you probably currently use for debugging).

is it possible to make a single serial print with all the prints i'm trying to do?
something like "Serial.print(now.day(), now.month())" etc

No, why do you think this is necessary?

for the serial print, I just wanted to make it all in 1 line, thought it was possible

but ok, I will do that for now on, thanks!!

for the serial print, I just wanted to make it all in 1 line, thought it was possible

Why? It's not faster, it needs more RAM and doesn't help otherwise.