@@ -106,8 +106,11 @@ func (c *Carbon) StartOfWeek() *Carbon {
106106 if c .IsInvalid () {
107107 return c
108108 }
109- dayOfWeek , weekStartsAt := c .DayOfWeek (), int (c .weekStartsAt )
110- return c .SubDays ((DaysPerWeek + dayOfWeek - weekStartsAt ) % DaysPerWeek ).StartOfDay ()
109+ dayOfWeek , weekStartsAt := c .StdTime ().Weekday (), c .WeekStartsAt ()
110+ if dayOfWeek == weekStartsAt {
111+ return c .StartOfDay ()
112+ }
113+ return c .SubDays (int (DaysPerWeek + dayOfWeek - weekStartsAt ) % DaysPerWeek ).StartOfDay ()
111114}
112115
113116// EndOfWeek returns a Carbon instance for end of the week.
@@ -116,8 +119,11 @@ func (c *Carbon) EndOfWeek() *Carbon {
116119 if c .IsInvalid () {
117120 return c
118121 }
119- dayOfWeek , weekEndsAt := c .DayOfWeek (), int (c .weekStartsAt )+ DaysPerWeek - 1
120- return c .AddDays ((DaysPerWeek - dayOfWeek + weekEndsAt ) % DaysPerWeek ).EndOfDay ()
122+ dayOfWeek , weekEndsAt := c .StdTime ().Weekday (), c .WeekEndsAt ()
123+ if dayOfWeek == weekEndsAt {
124+ return c .EndOfDay ()
125+ }
126+ return c .AddDays (int (DaysPerWeek - dayOfWeek + weekEndsAt ) % DaysPerWeek ).EndOfDay ()
121127}
122128
123129// StartOfDay returns a Carbon instance for start of the day.
@@ -127,7 +133,7 @@ func (c *Carbon) StartOfDay() *Carbon {
127133 return c
128134 }
129135 year , month , day := c .Date ()
130- return create (year , month , day , 0 , 0 , 0 , 0 )
136+ return create (year , month , day , 0 , 0 , 0 , 0 , c . Timezone () )
131137}
132138
133139// EndOfDay returns a Carbon instance for end of the day.
@@ -137,7 +143,7 @@ func (c *Carbon) EndOfDay() *Carbon {
137143 return c
138144 }
139145 year , month , day := c .Date ()
140- return create (year , month , day , 23 , 59 , 59 , 999999999 )
146+ return create (year , month , day , 23 , 59 , 59 , 999999999 , c . Timezone () )
141147}
142148
143149// StartOfHour returns a Carbon instance for start of the hour.
@@ -147,7 +153,7 @@ func (c *Carbon) StartOfHour() *Carbon {
147153 return c
148154 }
149155 year , month , day := c .Date ()
150- return create (year , month , day , c .Hour (), 0 , 0 , 0 )
156+ return create (year , month , day , c .Hour (), 0 , 0 , 0 , c . Timezone () )
151157}
152158
153159// EndOfHour returns a Carbon instance for end of the hour.
@@ -157,7 +163,7 @@ func (c *Carbon) EndOfHour() *Carbon {
157163 return c
158164 }
159165 year , month , day := c .Date ()
160- return create (year , month , day , c .Hour (), 59 , 59 , 999999999 )
166+ return create (year , month , day , c .Hour (), 59 , 59 , 999999999 , c . Timezone () )
161167}
162168
163169// StartOfMinute returns a Carbon instance for start of the minute.
@@ -167,7 +173,7 @@ func (c *Carbon) StartOfMinute() *Carbon {
167173 return c
168174 }
169175 year , month , day , hour , minute , _ := c .DateTime ()
170- return create (year , month , day , hour , minute , 0 , 0 )
176+ return create (year , month , day , hour , minute , 0 , 0 , c . Timezone () )
171177}
172178
173179// EndOfMinute returns a Carbon instance for end of the minute.
@@ -177,7 +183,7 @@ func (c *Carbon) EndOfMinute() *Carbon {
177183 return c
178184 }
179185 year , month , day , hour , minute , _ := c .DateTime ()
180- return create (year , month , day , hour , minute , 59 , 999999999 )
186+ return create (year , month , day , hour , minute , 59 , 999999999 , c . Timezone () )
181187}
182188
183189// StartOfSecond returns a Carbon instance for start of the second.
@@ -187,7 +193,7 @@ func (c *Carbon) StartOfSecond() *Carbon {
187193 return c
188194 }
189195 year , month , day , hour , minute , second := c .DateTime ()
190- return create (year , month , day , hour , minute , second , 0 )
196+ return create (year , month , day , hour , minute , second , 0 , c . Timezone () )
191197}
192198
193199// EndOfSecond returns a Carbon instance for end of the second.
@@ -197,5 +203,5 @@ func (c *Carbon) EndOfSecond() *Carbon {
197203 return c
198204 }
199205 year , month , day , hour , minute , second := c .DateTime ()
200- return create (year , month , day , hour , minute , second , 999999999 )
206+ return create (year , month , day , hour , minute , second , 999999999 , c . Timezone () )
201207}
0 commit comments