First, this
date('d-m-Y', strtotime('now'))
is the same as
date('d-m-Y')
Next, why you are formatting the date of a formatted date?
This
$gbdate = date('d-m-Y ', strtotime('now'));
$formatted_date = strftime("%A %d %B", strtotime($gbdate));
Could be this
$formatted_date = date('D m F');
or
$formatted_date = strftime("%A %d %B");
Now to the comparison, you should use time stamps. You are using strtotime so you are likely familiar with time stamps. Store times as time stamps in your database and compare them as time stamps. Then, you can use "date" to make a formatted time for display.
$str_todaysdate = date('Y-m-d');
$tides = mysql_query("SELECT * FROM tides WHERE date1 = '$str_todaysdate'");
$formatted_date = date('D m F');
if(mysql_num_rows($tides) > 0){
while($row = mysql_fetch_array($tides)){
if($row['Morning_tide'] > time()) {
echo $formatted_date . "<br>High Tide " . date('H:i', $row['Morning_tide']);
}
else {
echo $formatted_date . "<br>High Tide " . date('H:i', $row['Afternoon_tide']);
}
}
}