int dayLed = 11;
int moonLed = 10;
int dayBrightness = dayLed;
int moonBrightness = moonLed;
int prevBrightness;
int fadeCurrentMillis = 0;
int fadePreviousMillis = 0;
int fadeInterval = 7059;
int x = dayLed;
int y = moonLed;
There is NOTHING magic about the string "millis" in a time variable name. If fact, at some point (about 15 minutes after you see it, in my case), it begins to look stupid.
I really can't tell which of these variables hold pin numbers and which hold pin values. I'd rename all of these to make that crystal clear, so that 3 months later, when you have a "Hey, I want to add XXX", you don't have to guess what the heck you were doing.
How many of these variables use types that are too large? How many use types that are too small?
Time stuff always goes in unsigned long variables.
One letter global variable names are a disaster waiting to happen.
Well, that's enough on that little bit of code. 8)
byte nightHour = 24;
24? Does your clock really tell you that it is 24:45? Mine certainly doesn't.
const long interval = 1000;
In case you later decide that the interval should be -750?
if (startMorningFade == true) { //Sunrise led over 30 minutes
if (startEveningFade == true) {
if (startMoonFade == true) {
if (endMoonFade == true) {
How many of these are going to be true at any given time? If the answer (as I suspect) is 0 or 1, then if/else if is a better structure.
The value in startMorningFade will be either true or false. The result of comparing true to true is true. The result of comparing false to true is false. You can see, then, that the result of the comparison will be whatever the value in the boolean variable is. Therefore, the == true bit is not necessary.
checkDayCycle() also contains a lot if if statements that should be if/else if structured. It is some time. That time can not be within more than one range, so, once the proper range is found, it is not necessary to test the rest.
I like the fact that you have a lot of small functions that can be tested independently, and, once they are known to work, ignored. If it were my project, I'd create another tab, and move the small "I KNOW this works" functions to the other tab. That way, the important stuff, the stuff being developed, is on one tab, and not lost in the clutter of a lot of functions.