To break it down a bit more look at the following:
DECLARE @TestDate DATETIME;
SET @TestDate = GETDATE();
SELECT
@TestDate AS RunDate
, DATEADD(HOUR, -15, @TestDate) AS WorkingDate
, DATEADD(DAY, DATEDIFF(DAY, 0, DATEADD(HOUR, -15, @TestDate)), 0) AS BaseDate
, DATEADD(HOUR, 15, DATEADD(DAY, DATEDIFF(DAY, 0, DATEADD(HOUR, -15, @TestDate)), 0)) AS StartDate
, DATEADD(HOUR, 12, DATEADD(HOUR, 15, DATEADD(DAY, DATEDIFF(DAY, 0, DATEADD(HOUR, -15, @TestDate)), 0))) AS EndDate;
SET @TestDate = '2018-04-25 14:30:00';
SELECT
@TestDate AS RunDate
, DATEADD(HOUR, -15, @TestDate) AS WorkingDate
, DATEADD(DAY, DATEDIFF(DAY, 0, DATEADD(HOUR, -15, @TestDate)), 0) AS BaseDate
, DATEADD(HOUR, 15, DATEADD(DAY, DATEDIFF(DAY, 0, DATEADD(HOUR, -15, @TestDate)), 0)) AS StartDate
, DATEADD(HOUR, 12, DATEADD(HOUR, 15, DATEADD(DAY, DATEDIFF(DAY, 0, DATEADD(HOUR, -15, @TestDate)), 0))) AS EndDate;
SET @TestDate = '2018-04-25 15:30:00';
SELECT
@TestDate AS RunDate
, DATEADD(HOUR, -15, @TestDate) AS WorkingDate
, DATEADD(DAY, DATEDIFF(DAY, 0, DATEADD(HOUR, -15, @TestDate)), 0) AS BaseDate
, DATEADD(HOUR, 15, DATEADD(DAY, DATEDIFF(DAY, 0, DATEADD(HOUR, -15, @TestDate)), 0)) AS StartDate
, DATEADD(HOUR, 12, DATEADD(HOUR, 15, DATEADD(DAY, DATEDIFF(DAY, 0, DATEADD(HOUR, -15, @TestDate)), 0))) AS EndDate;