StartEndOfTest.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4. * This file is part of the Carbon package.
  5. *
  6. * (c) Brian Nesbitt <brian@nesbot.com>
  7. *
  8. * For the full copyright and license information, please view the LICENSE
  9. * file that was distributed with this source code.
  10. */
  11. namespace Tests\Carbon;
  12. use Carbon\Carbon;
  13. use Generator;
  14. use InvalidArgumentException;
  15. use Tests\AbstractTestCase;
  16. class StartEndOfTest extends AbstractTestCase
  17. {
  18. public function testStartOfDay()
  19. {
  20. $dt = Carbon::now();
  21. $this->assertInstanceOfCarbon($dt->startOfDay());
  22. $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, 0, 0, 0, 0);
  23. }
  24. public function testEndOfDay()
  25. {
  26. $dt = Carbon::now();
  27. $this->assertInstanceOfCarbon($dt->endOfDay());
  28. $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, 23, 59, 59, 999999);
  29. }
  30. public function testStartOfMonthIsFluid()
  31. {
  32. $dt = Carbon::now();
  33. $this->assertInstanceOfCarbon($dt->startOfMonth());
  34. }
  35. public function testStartOfMonthFromNow()
  36. {
  37. $dt = Carbon::now()->startOfMonth();
  38. $this->assertCarbon($dt, $dt->year, $dt->month, 1, 0, 0, 0);
  39. }
  40. public function testStartOfMonthFromLastDay()
  41. {
  42. $dt = Carbon::create(2000, 1, 31, 2, 3, 4)->startOfMonth();
  43. $this->assertCarbon($dt, 2000, 1, 1, 0, 0, 0);
  44. }
  45. public function testStartOfYearIsFluid()
  46. {
  47. $dt = Carbon::now();
  48. $this->assertInstanceOfCarbon($dt->startOfYear());
  49. }
  50. public function testStartOfYearFromNow()
  51. {
  52. $dt = Carbon::now()->startOfYear();
  53. $this->assertCarbon($dt, $dt->year, 1, 1, 0, 0, 0);
  54. }
  55. public function testStartOfYearFromFirstDay()
  56. {
  57. $dt = Carbon::create(2000, 1, 1, 1, 1, 1)->startOfYear();
  58. $this->assertCarbon($dt, 2000, 1, 1, 0, 0, 0);
  59. }
  60. public function testStartOfYearFromLastDay()
  61. {
  62. $dt = Carbon::create(2000, 12, 31, 23, 59, 59)->startOfYear();
  63. $this->assertCarbon($dt, 2000, 1, 1, 0, 0, 0);
  64. }
  65. public function testEndOfMonthIsFluid()
  66. {
  67. $dt = Carbon::now();
  68. $this->assertInstanceOfCarbon($dt->endOfMonth());
  69. }
  70. public function testEndOfMonth()
  71. {
  72. $dt = Carbon::create(2000, 1, 1, 2, 3, 4)->endOfMonth();
  73. $this->assertCarbon($dt, 2000, 1, 31, 23, 59, 59, 999999);
  74. }
  75. public function testEndOfMonthFromLastDay()
  76. {
  77. $dt = Carbon::create(2000, 1, 31, 2, 3, 4)->endOfMonth();
  78. $this->assertCarbon($dt, 2000, 1, 31, 23, 59, 59, 999999);
  79. }
  80. public function testEndOfYearIsFluid()
  81. {
  82. $dt = Carbon::now();
  83. $this->assertInstanceOfCarbon($dt->endOfYear());
  84. }
  85. public function testEndOfYearFromNow()
  86. {
  87. $dt = Carbon::now()->endOfYear();
  88. $this->assertCarbon($dt, $dt->year, 12, 31, 23, 59, 59, 999999);
  89. }
  90. public function testEndOfYearFromFirstDay()
  91. {
  92. $dt = Carbon::create(2000, 1, 1, 1, 1, 1)->endOfYear();
  93. $this->assertCarbon($dt, 2000, 12, 31, 23, 59, 59, 999999);
  94. }
  95. public function testEndOfYearFromLastDay()
  96. {
  97. $dt = Carbon::create(2000, 12, 31, 23, 59, 59)->endOfYear();
  98. $this->assertCarbon($dt, 2000, 12, 31, 23, 59, 59, 999999);
  99. }
  100. public function testStartOfDecadeIsFluid()
  101. {
  102. $dt = Carbon::now();
  103. $this->assertInstanceOfCarbon($dt->startOfDecade());
  104. }
  105. public function testStartOfDecadeFromNow()
  106. {
  107. $dt = Carbon::now()->startOfDecade();
  108. $this->assertCarbon($dt, $dt->year - $dt->year % 10, 1, 1, 0, 0, 0);
  109. }
  110. public function testStartOfDecadeFromFirstDay()
  111. {
  112. $dt = Carbon::create(2000, 1, 1, 1, 1, 1)->startOfDecade();
  113. $this->assertCarbon($dt, 2000, 1, 1, 0, 0, 0);
  114. }
  115. public function testStartOfDecadeFromLastDay()
  116. {
  117. $dt = Carbon::create(2009, 12, 31, 23, 59, 59)->startOfDecade();
  118. $this->assertCarbon($dt, 2000, 1, 1, 0, 0, 0);
  119. }
  120. public function testEndOfDecadeIsFluid()
  121. {
  122. $dt = Carbon::now();
  123. $this->assertInstanceOfCarbon($dt->endOfDecade());
  124. }
  125. public function testEndOfDecadeFromNow()
  126. {
  127. $dt = Carbon::now()->endOfDecade();
  128. $this->assertCarbon($dt, $dt->year - $dt->year % 10 + 9, 12, 31, 23, 59, 59, 999999);
  129. }
  130. public function testEndOfDecadeFromFirstDay()
  131. {
  132. $dt = Carbon::create(2000, 1, 1, 1, 1, 1)->endOfDecade();
  133. $this->assertCarbon($dt, 2009, 12, 31, 23, 59, 59, 999999);
  134. }
  135. public function testEndOfDecadeFromLastDay()
  136. {
  137. $dt = Carbon::create(2009, 12, 31, 23, 59, 59)->endOfDecade();
  138. $this->assertCarbon($dt, 2009, 12, 31, 23, 59, 59, 999999);
  139. }
  140. public function testStartOfCenturyIsFluid()
  141. {
  142. $dt = Carbon::now();
  143. $this->assertInstanceOfCarbon($dt->startOfCentury());
  144. }
  145. public function testStartOfCenturyFromNow()
  146. {
  147. $now = Carbon::now();
  148. $dt = Carbon::now()->startOfCentury();
  149. $this->assertCarbon($dt, $now->year - $now->year % 100 + 1, 1, 1, 0, 0, 0);
  150. }
  151. public function testStartOfCenturyFromFirstDay()
  152. {
  153. $dt = Carbon::create(2001, 1, 1, 1, 1, 1)->startOfCentury();
  154. $this->assertCarbon($dt, 2001, 1, 1, 0, 0, 0);
  155. }
  156. public function testStartOfCenturyFromLastDay()
  157. {
  158. $dt = Carbon::create(2100, 12, 31, 23, 59, 59)->startOfCentury();
  159. $this->assertCarbon($dt, 2001, 1, 1, 0, 0, 0);
  160. }
  161. public function testStartOfMillenniumIsFluid()
  162. {
  163. $dt = Carbon::now();
  164. $this->assertInstanceOfCarbon($dt->startOfMillennium());
  165. }
  166. public function testStartOfMillenniumFromNow()
  167. {
  168. $now = Carbon::now();
  169. $dt = Carbon::now()->startOfMillennium();
  170. $this->assertCarbon($dt, $now->year - $now->year % 1000 + 1, 1, 1, 0, 0, 0);
  171. }
  172. public function testStartOfMillenniumFromFirstDay()
  173. {
  174. $dt = Carbon::create(2001, 1, 1, 1, 1, 1)->startOfMillennium();
  175. $this->assertCarbon($dt, 2001, 1, 1, 0, 0, 0);
  176. }
  177. public function testStartOfMillenniumFromLastDay()
  178. {
  179. $dt = Carbon::create(3000, 12, 31, 23, 59, 59)->startOfMillennium();
  180. $this->assertCarbon($dt, 2001, 1, 1, 0, 0, 0);
  181. }
  182. public function testStartOfHourIsFluid()
  183. {
  184. $dt = Carbon::now();
  185. $this->assertInstanceOfCarbon($dt->startOfHour());
  186. }
  187. public function testStartOfHourFromNow()
  188. {
  189. $now = Carbon::now();
  190. $dt = Carbon::now()->startOfHour();
  191. $this->assertCarbon($dt, $now->year, $now->month, $now->day, $now->hour, 0, 0);
  192. }
  193. public function testStartOfHourFromFirstMinute()
  194. {
  195. $dt = Carbon::create(2001, 1, 1, 1, 1, 1)->startOfHour();
  196. $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, 0, 0);
  197. }
  198. public function testStartOfHourFromLastMinute()
  199. {
  200. $dt = Carbon::create(2100, 12, 31, 23, 59, 59)->startOfHour();
  201. $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, 0, 0);
  202. }
  203. public function testEndOfHourIsFluid()
  204. {
  205. $dt = Carbon::now();
  206. $this->assertInstanceOfCarbon($dt->endOfHour());
  207. }
  208. public function testEndOfHourFromNow()
  209. {
  210. $now = Carbon::now();
  211. $dt = Carbon::now()->endOfHour();
  212. $this->assertCarbon($dt, $now->year, $now->month, $now->day, $now->hour, 59, 59, 999999);
  213. }
  214. public function testEndOfHourFromFirstMinute()
  215. {
  216. $dt = Carbon::create(2001, 1, 1, 1, 1, rand(0, 59))->endOfHour();
  217. $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, 59, 59, 999999);
  218. }
  219. public function testEndOfHourFromLastMinute()
  220. {
  221. $dt = Carbon::create(2100, 12, 31, 23, 59, rand(0, 59))->endOfHour();
  222. $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, 59, 59, 999999);
  223. }
  224. public function testStartOfMinuteIsFluid()
  225. {
  226. $dt = Carbon::now();
  227. $this->assertInstanceOfCarbon($dt->startOfMinute());
  228. }
  229. public function testStartOfMinuteFromNow()
  230. {
  231. $now = Carbon::now();
  232. $dt = Carbon::now()->startOfMinute();
  233. $this->assertCarbon($dt, $now->year, $now->month, $now->day, $now->hour, $now->minute, 0);
  234. }
  235. public function testStartOfMinuteFromFirstSecond()
  236. {
  237. $dt = Carbon::create(2001, 1, 1, 1, 1, 1)->startOfMinute();
  238. $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, $dt->minute, 0);
  239. }
  240. public function testStartOfMinuteFromLastSecond()
  241. {
  242. $dt = Carbon::create(2100, 12, 31, 23, 59, 59)->startOfMinute();
  243. $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, $dt->minute, 0);
  244. }
  245. public function testEndOfMinuteIsFluid()
  246. {
  247. $dt = Carbon::now();
  248. $this->assertInstanceOfCarbon($dt->endOfMinute());
  249. }
  250. public function testEndOfMinuteFromNow()
  251. {
  252. $now = Carbon::now();
  253. $dt = Carbon::now()->endOfMinute();
  254. $this->assertCarbon($dt, $now->year, $now->month, $now->day, $now->hour, $now->minute, 59, 999999);
  255. }
  256. public function testEndOfMinuteFromFirstSecond()
  257. {
  258. $dt = Carbon::create(2001, 1, 1, 1, 1, 1)->endOfMinute();
  259. $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, $dt->minute, 59, 999999);
  260. }
  261. public function testEndOfMinuteFromLastSecond()
  262. {
  263. $dt = Carbon::create(2100, 12, 31, 23, 59, 59)->endOfMinute();
  264. $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, $dt->minute, 59, 999999);
  265. }
  266. public function testStartOfSecondIsFluid()
  267. {
  268. $dt = Carbon::now();
  269. $this->assertInstanceOfCarbon($dt->startOfSecond());
  270. }
  271. public function testStartOfSecondFromNow()
  272. {
  273. $now = Carbon::now();
  274. $dt = Carbon::now()->startOfSecond();
  275. $this->assertCarbon($dt, $now->year, $now->month, $now->day, $now->hour, $now->minute, $now->second, 0);
  276. }
  277. public function testStartOfSecondFromFirstSecond()
  278. {
  279. $dt = Carbon::create(2001, 1, 1, 1, 1, 1)->startOfSecond();
  280. $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, $dt->minute, $dt->second, 0);
  281. }
  282. public function testStartOfSecondFromLastSecond()
  283. {
  284. $dt = Carbon::create(2100, 12, 31, 23, 59, 59)->startOfSecond();
  285. $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, $dt->minute, $dt->second, 0);
  286. }
  287. public function testEndOfSecondIsFluid()
  288. {
  289. $dt = Carbon::now();
  290. $this->assertInstanceOfCarbon($dt->endOfSecond());
  291. }
  292. public function testEndOfSecondFromNow()
  293. {
  294. $now = Carbon::now();
  295. $dt = Carbon::now()->endOfSecond();
  296. $this->assertCarbon($dt, $now->year, $now->month, $now->day, $now->hour, $now->minute, $now->second, 999999);
  297. }
  298. public function testEndOfSecondFromFirstSecond()
  299. {
  300. $dt = Carbon::create(2001, 1, 1, 1, 1, 1)->modify('01:01:01.1')->endOfSecond();
  301. $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, $dt->minute, $dt->second, 999999);
  302. }
  303. public function testEndOfSecondFromLastSecond()
  304. {
  305. $dt = Carbon::create(2100, 12, 31, 23, 59, 59)->modify('23:59:59.1')->endOfSecond();
  306. $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, $dt->hour, $dt->minute, $dt->second, 999999);
  307. }
  308. public function testStartOfSecond()
  309. {
  310. $dt = new Carbon('2000-06-15 23:10:10.123456');
  311. $this->assertCarbon($dt->startOfSecond(), 2000, 6, 15, 23, 10, 10, 0);
  312. $this->assertCarbon($dt->endOfSecond(), 2000, 6, 15, 23, 10, 10, 999999);
  313. }
  314. public function testMidDayIsFluid()
  315. {
  316. $dt = Carbon::now();
  317. $this->assertInstanceOfCarbon($dt->midDay());
  318. }
  319. public function testMidDayFromNow()
  320. {
  321. $now = Carbon::now();
  322. $dt = Carbon::now()->midDay();
  323. $this->assertCarbon($dt, $now->year, $now->month, $now->day, 12, 0, 0);
  324. }
  325. public function testEndOfCenturyIsFluid()
  326. {
  327. $dt = Carbon::now();
  328. $this->assertInstanceOfCarbon($dt->endOfCentury());
  329. }
  330. public function testEndOfCenturyFromNow()
  331. {
  332. $now = Carbon::now();
  333. $dt = Carbon::now()->endOfCentury();
  334. $this->assertCarbon($dt, $now->year - $now->year % 100 + 100, 12, 31, 23, 59, 59, 999999);
  335. }
  336. public function testEndOfCenturyFromFirstDay()
  337. {
  338. $dt = Carbon::create(2001, 1, 1, 1, 1, 1)->endOfCentury();
  339. $this->assertCarbon($dt, 2100, 12, 31, 23, 59, 59, 999999);
  340. }
  341. public function testEndOfCenturyFromLastDay()
  342. {
  343. $dt = Carbon::create(2100, 12, 31, 23, 59, 59)->endOfCentury();
  344. $this->assertCarbon($dt, 2100, 12, 31, 23, 59, 59, 999999);
  345. }
  346. public function testEndOfMillenniumIsFluid()
  347. {
  348. $dt = Carbon::now();
  349. $this->assertInstanceOfCarbon($dt->endOfMillennium());
  350. }
  351. public function testEndOfMillenniumFromNow()
  352. {
  353. $now = Carbon::now();
  354. $dt = Carbon::now()->endOfMillennium();
  355. $this->assertCarbon($dt, $now->year - $now->year % 1000 + 1000, 12, 31, 23, 59, 59);
  356. }
  357. public function testEndOfMillenniumFromFirstDay()
  358. {
  359. $dt = Carbon::create(2001, 1, 1, 1, 1, 1)->endOfMillennium();
  360. $this->assertCarbon($dt, 3000, 12, 31, 23, 59, 59);
  361. }
  362. public function testEndOfMillenniumFromLastDay()
  363. {
  364. $dt = Carbon::create(2100, 12, 31, 23, 59, 59)->endOfMillennium();
  365. $this->assertCarbon($dt, 3000, 12, 31, 23, 59, 59);
  366. }
  367. public function testStartOfQuarterIsFluid()
  368. {
  369. $dt = Carbon::now();
  370. $this->assertInstanceOfCarbon($dt->startOfQuarter());
  371. }
  372. public static function dataForTestStartOfQuarter(): Generator
  373. {
  374. yield [1, 1];
  375. yield [2, 1];
  376. yield [3, 1];
  377. yield [4, 4];
  378. yield [5, 4];
  379. yield [6, 4];
  380. yield [7, 7];
  381. yield [8, 7];
  382. yield [9, 7];
  383. yield [10, 10];
  384. yield [11, 10];
  385. yield [12, 10];
  386. }
  387. /**
  388. * @dataProvider \Tests\Carbon\StartEndOfTest::dataForTestStartOfQuarter
  389. *
  390. * @param int $month
  391. * @param int $startOfQuarterMonth
  392. */
  393. public function testStartOfQuarter($month, $startOfQuarterMonth)
  394. {
  395. $dt = Carbon::create(2015, $month, 15, 1, 2, 3);
  396. $this->assertCarbon($dt->startOfQuarter(), 2015, $startOfQuarterMonth, 1, 0, 0, 0);
  397. }
  398. public function testEndOfQuarterIsFluid()
  399. {
  400. $dt = Carbon::now();
  401. $this->assertInstanceOfCarbon($dt->endOfQuarter());
  402. }
  403. public static function dataForTestEndOfQuarter(): Generator
  404. {
  405. yield [1, 3, 31];
  406. yield [2, 3, 31];
  407. yield [3, 3, 31];
  408. yield [4, 6, 30];
  409. yield [5, 6, 30];
  410. yield [6, 6, 30];
  411. yield [7, 9, 30];
  412. yield [8, 9, 30];
  413. yield [9, 9, 30];
  414. yield [10, 12, 31];
  415. yield [11, 12, 31];
  416. yield [12, 12, 31];
  417. }
  418. /**
  419. * @dataProvider \Tests\Carbon\StartEndOfTest::dataForTestEndOfQuarter
  420. *
  421. * @param int $month
  422. * @param int $endOfQuarterMonth
  423. * @param int $endOfQuarterDay
  424. */
  425. public function testEndOfQuarter($month, $endOfQuarterMonth, $endOfQuarterDay)
  426. {
  427. $dt = Carbon::create(2015, $month, 15, 1, 2, 3);
  428. $this->assertCarbon($dt->endOfQuarter(), 2015, $endOfQuarterMonth, $endOfQuarterDay, 23, 59, 59, 999999);
  429. }
  430. public function testAverageIsFluid()
  431. {
  432. $dt = Carbon::now()->average();
  433. $this->assertInstanceOfCarbon($dt);
  434. }
  435. public function testAverageFromSame()
  436. {
  437. $dt1 = Carbon::create(2000, 1, 31, 2, 3, 4);
  438. $dt2 = Carbon::create(2000, 1, 31, 2, 3, 4)->average($dt1);
  439. $this->assertCarbon($dt2, 2000, 1, 31, 2, 3, 4);
  440. }
  441. public function testAverageFromGreater()
  442. {
  443. $dt1 = Carbon::create(2000, 1, 1, 1, 1, 1);
  444. $dt2 = Carbon::create(2009, 12, 31, 23, 59, 59)->average($dt1);
  445. $this->assertCarbon($dt2, 2004, 12, 31, 12, 30, 30);
  446. }
  447. public function testAverageFromLower()
  448. {
  449. $dt1 = Carbon::create(2009, 12, 31, 23, 59, 59);
  450. $dt2 = Carbon::create(2000, 1, 1, 1, 1, 1)->average($dt1);
  451. $this->assertCarbon($dt2, 2004, 12, 31, 12, 30, 30);
  452. }
  453. public function testAverageWithCloseDates()
  454. {
  455. $dt1 = Carbon::parse('2004-01-24 09:46:56.500000');
  456. $dt2 = Carbon::parse('2004-01-24 09:46:56.600000');
  457. $this->assertSame('2004-01-24 09:46:56.550000', $dt1->average($dt2)->format('Y-m-d H:i:s.u'));
  458. }
  459. public function testAverageWithFarDates()
  460. {
  461. $dt1 = Carbon::parse('-2018-05-07 12:34:46.500000', 'UTC');
  462. $dt2 = Carbon::parse('6025-10-11 20:59:06.600000', 'UTC');
  463. $this->assertSame('2004-01-24 04:46:56.550000', $dt1->average($dt2)->format('Y-m-d H:i:s.u'));
  464. }
  465. public function testStartOf()
  466. {
  467. $dt = Carbon::now();
  468. $this->assertInstanceOfCarbon($dt->startOf('day'));
  469. $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, 0, 0, 0, 0);
  470. $dt = Carbon::now();
  471. $this->assertInstanceOfCarbon($dt->startOf('Months'));
  472. $this->assertCarbon($dt, $dt->year, $dt->month, 1, 0, 0, 0, 0);
  473. }
  474. public function testEndOf()
  475. {
  476. $dt = Carbon::now();
  477. $this->assertInstanceOfCarbon($dt->endOf('day'));
  478. $this->assertCarbon($dt, $dt->year, $dt->month, $dt->day, 23, 59, 59, 999999);
  479. $dt = Carbon::now();
  480. $this->assertInstanceOfCarbon($dt->endOf('Months'));
  481. $this->assertCarbon($dt, $dt->year, $dt->month, $dt->daysInMonth, 23, 59, 59, 999999);
  482. }
  483. public function testStartOfInvalidUnit()
  484. {
  485. $this->expectExceptionObject(new InvalidArgumentException(
  486. 'Unknown unit \'microsecond\''
  487. ));
  488. Carbon::now()->startOf('microsecond');
  489. }
  490. public function testEndOfInvalidUnit()
  491. {
  492. $this->expectExceptionObject(new InvalidArgumentException(
  493. 'Unknown unit \'microsecond\''
  494. ));
  495. Carbon::now()->endOf('microsecond');
  496. }
  497. }