diff --git a/date/util.go b/date/util.go index f1a524c..48fb5a4 100644 --- a/date/util.go +++ b/date/util.go @@ -306,14 +306,16 @@ func CalculateMarketSecondsBetween(start, end, marketOpen, marketClose time.Time startEastern := start.In(Eastern()) endEastern := end.In(Eastern()) - startMarketOpen := NextMarketOpen(startEastern, marketOpen, isHoliday) - startMarketClose := NextMarketClose(startEastern, marketClose, isHoliday) + startMarketOpen := On(marketOpen, startEastern) + startMarketClose := On(marketClose, startEastern) - if (startEastern.Equal(startMarketOpen) || startEastern.After(startMarketOpen)) && startEastern.Before(startMarketClose) { - if endEastern.Before(startMarketClose) { - seconds += int64(endEastern.Sub(startEastern) / time.Second) - } else { - seconds += int64(startMarketClose.Sub(startEastern) / time.Second) + if !IsWeekendDay(startMarketOpen.Weekday()) && !isHoliday(startMarketOpen) { + if (startEastern.Equal(startMarketOpen) || startEastern.After(startMarketOpen)) && startEastern.Before(startMarketClose) { + if endEastern.Before(startMarketClose) { + seconds += int64(endEastern.Sub(startEastern) / time.Second) + } else { + seconds += int64(startMarketClose.Sub(startEastern) / time.Second) + } } } diff --git a/date/util_test.go b/date/util_test.go index 7310cec..8538053 100644 --- a/date/util_test.go +++ b/date/util_test.go @@ -76,6 +76,17 @@ func TestCalculateMarketSecondsBetween(t *testing.T) { assert.Equal(shouldbe, CalculateMarketSecondsBetween(start, end, NYSEOpen, NYSEClose, IsNYSEHoliday)) } +func TestCalculateMarketSecondsBetween1D(t *testing.T) { + assert := assert.New(t) + + start := time.Date(2016, 07, 22, 9, 45, 0, 0, Eastern()) + end := time.Date(2016, 07, 22, 15, 45, 0, 0, Eastern()) + + shouldbe := 6 * 60 * 60 + + assert.Equal(shouldbe, CalculateMarketSecondsBetween(start, end, NYSEOpen, NYSEClose, IsNYSEHoliday)) +} + func TestCalculateMarketSecondsBetweenLTM(t *testing.T) { assert := assert.New(t) diff --git a/defaults.go b/defaults.go index fc69d0e..88dbd03 100644 --- a/defaults.go +++ b/defaults.go @@ -2,7 +2,6 @@ package chart import ( "sync" - "time" "github.com/golang/freetype/truetype" "github.com/wcharczuk/go-chart/drawing" @@ -59,7 +58,7 @@ const ( // DefaultDateHourFormat is the date format for hour timestamp formats. DefaultDateHourFormat = "01-02 3PM" // DefaultDateMinuteFormat is the date format for minute range timestamp formats. - DefaultDateMinuteFormat = time.Kitchen + DefaultDateMinuteFormat = "01-02 3:04PM" // DefaultFloatFormat is the default float format. DefaultFloatFormat = "%.2f" // DefaultPercentValueFormat is the default percent format. diff --git a/market_hours_range.go b/market_hours_range.go index baadc39..86a7317 100644 --- a/market_hours_range.go +++ b/market_hours_range.go @@ -111,8 +111,8 @@ func (mhr MarketHoursRange) String() string { func (mhr MarketHoursRange) Translate(value float64) int { valueTime := Float64ToTime(value) valueTimeEastern := valueTime.In(date.Eastern()) - deltaSeconds := date.CalculateMarketSecondsBetween(mhr.Min, mhr.Max, mhr.MarketOpen, mhr.MarketClose, mhr.HolidayProvider) + totalSeconds := date.CalculateMarketSecondsBetween(mhr.Min, mhr.Max, mhr.MarketOpen, mhr.MarketClose, mhr.HolidayProvider) valueDelta := date.CalculateMarketSecondsBetween(mhr.Min, valueTimeEastern, mhr.MarketOpen, mhr.MarketClose, mhr.HolidayProvider) - translated := int((float64(valueDelta) / float64(deltaSeconds)) * float64(mhr.Domain)) + translated := int((float64(valueDelta) / float64(totalSeconds)) * float64(mhr.Domain)) return translated }