Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 

2381 строка
85 KiB

  1. // import PersianDate from "./dist/PersianDate.js";
  2. const PersianDate = require("./dist/PersianDate.js");
  3. const perf = require("@alireza-ab/performance-check");
  4. let persianDate = new PersianDate();
  5. ////////////////////------------- ATTENTION -------------////////////////////
  6. // please change now date and start test //
  7. /////////////////////////////////////////////////////////////////////////////
  8. const now = {
  9. year: 1401,
  10. month: 3,
  11. date: 31,
  12. };
  13. test("create date and return now", () => {
  14. perf.start();
  15. let date = new Date();
  16. persianDate.now();
  17. expect(persianDate.year()).toBe(now.year);
  18. expect(persianDate.month()).toBe(now.month);
  19. expect(persianDate.date()).toBe(now.date);
  20. expect(persianDate.hour()).toBe(date.getHours());
  21. expect(persianDate.minute()).toBe(date.getMinutes());
  22. expect(persianDate.second()).toBe(date.getSeconds());
  23. expect(persianDate.millisecond()).toBe(date.getMilliseconds());
  24. expect(persianDate.calendar("g").toDate().toString()).toBe(date.toString());
  25. expect(new PersianDate(null, "g").toDate().toString()).toBe(date.toString());
  26. });
  27. test("create date with date and calendar", () => {
  28. expect(
  29. new PersianDate(["2020", "7", "27", "11", "5", "8", "452"]).toString(
  30. "datetime:ss.c"
  31. )
  32. ).toBe("1399/05/06 11:05:08.452");
  33. expect(new PersianDate("2020-8-27").toString("datetime:ss.c")).toBe(
  34. "1399/06/06 00:00:00.0"
  35. );
  36. expect(new PersianDate(["2021", "5", 8], "g").toString("datetime:ss.c")).toBe(
  37. "2021-05-08 00:00:00.0"
  38. );
  39. expect(new PersianDate("2020-8-27", "g").toString("datetime:ss.c")).toBe(
  40. "2020-08-27 00:00:00.0"
  41. );
  42. expect(new PersianDate(["1400", "5", 8], "j").toString("datetime:ss.c")).toBe(
  43. "1400/05/08 00:00:00.0"
  44. );
  45. expect(new PersianDate("1400/8/27", "j").toString("datetime:ss.c")).toBe(
  46. "1400/08/27 00:00:00.0"
  47. );
  48. });
  49. test("now function", () => {
  50. persianDate.calendar("j").now();
  51. let date = new Date();
  52. expect(persianDate.year()).toBe(now.year);
  53. expect(persianDate.month()).toBe(now.month);
  54. expect(persianDate.date()).toBe(now.date);
  55. expect(persianDate.hour()).toBe(date.getHours());
  56. expect(persianDate.minute()).toBe(date.getMinutes());
  57. expect(persianDate.second()).toBe(date.getSeconds());
  58. expect(persianDate.millisecond()).toBe(date.getMilliseconds());
  59. expect(persianDate.calendar("g").now().toString("M/D/y, h:mm:ss A")).toBe(
  60. new Date().toLocaleString()
  61. );
  62. });
  63. ////////////////////------------- ATTENTION -------------////////////////////
  64. // "setDate" is deprecated. "fromGregorian" replaced this. //
  65. /////////////////////////////////////////////////////////////////////////////
  66. /*test('setDate function with all parameters', () => {
  67. persianDate.setDate('2020', '7', '27', '11', '5', '8', '452');
  68. expect(persianDate.year()).toBe(1399);
  69. expect(persianDate.month()).toBe(5);
  70. expect(persianDate.date()).toBe(6);
  71. expect(persianDate.hour()).toBe(11);
  72. expect(persianDate.minute()).toBe(5);
  73. expect(persianDate.second()).toBe(8);
  74. expect(persianDate.millisecond()).toBe(452);
  75. });
  76. test('setDate function with Date parameter', () => {
  77. persianDate.setDate(new Date());
  78. expect(persianDate.year()).toBe(now.year);
  79. expect(persianDate.month()).toBe(now.month);
  80. expect(persianDate.date()).toBe(now.date);
  81. expect(persianDate.hour()).toBe((new Date()).getHours());
  82. expect(persianDate.minute()).toBe((new Date()).getMinutes());
  83. expect(persianDate.second()).toBe((new Date()).getSeconds());
  84. // expect(persianDate.millisecond()).toBe((new Date()).getMilliseconds());
  85. });
  86. test('setDate function with string parameter', () => {
  87. persianDate.setDate('2020-8-27');
  88. expect(persianDate.year()).toBe(1399);
  89. expect(persianDate.month()).toBe(6);
  90. expect(persianDate.date()).toBe(6);
  91. expect(persianDate.hour()).toBe(0);
  92. expect(persianDate.minute()).toBe(0);
  93. expect(persianDate.second()).toBe(0);
  94. expect(persianDate.millisecond()).toBe(0);
  95. });*/
  96. test("parse function", () => {
  97. persianDate.calendar("j").parse("1399", "6", "6", "14", "45");
  98. expect(persianDate.year()).toBe(1399);
  99. expect(persianDate.month()).toBe(6);
  100. expect(persianDate.date()).toBe(6);
  101. expect(persianDate.hour()).toBe(14);
  102. expect(persianDate.minute()).toBe(45);
  103. expect(persianDate.second()).toBe(0);
  104. expect(persianDate.millisecond()).toBe(0);
  105. persianDate.calendar("g").parse("2020", "6", "6", "14", "45");
  106. expect(persianDate.toDate()).toEqual(
  107. new Date("2020", "5", "6", "14", "45", 0, 0)
  108. );
  109. });
  110. test("parse function with string parameter", () => {
  111. persianDate.calendar("j").parse("1399-6-6 14:45");
  112. expect(persianDate.year()).toBe(1399);
  113. expect(persianDate.month()).toBe(6);
  114. expect(persianDate.date()).toBe(6);
  115. expect(persianDate.hour()).toBe(14);
  116. expect(persianDate.minute()).toBe(45);
  117. expect(persianDate.second()).toBe(0);
  118. expect(persianDate.millisecond()).toBe(0);
  119. persianDate.calendar("g").parse("2020-6-6 14:45");
  120. expect(persianDate.toDate()).toEqual(
  121. new Date("2020", "5", "6", "14", "45", 0, 0)
  122. );
  123. });
  124. test("parse function with array parameter", () => {
  125. persianDate.calendar("j").parse(["1399", "6", "6", "14", "45", "4", "54"]);
  126. expect(persianDate.year()).toBe(1399);
  127. expect(persianDate.month()).toBe(6);
  128. expect(persianDate.date()).toBe(6);
  129. expect(persianDate.hour()).toBe(14);
  130. expect(persianDate.minute()).toBe(45);
  131. expect(persianDate.second()).toBe(4);
  132. expect(persianDate.millisecond()).toBe(54);
  133. persianDate.calendar("g").parse(["2020", "6", "6", "14", "45", "4", "54"]);
  134. expect(persianDate.toDate()).toEqual(
  135. new Date("2020", "5", "6", "14", "45", "4", "54")
  136. );
  137. });
  138. test("parse function with object parameter", () => {
  139. persianDate.calendar("j").parse({
  140. year: "1399",
  141. M: "6",
  142. date: "6",
  143. hour: "14",
  144. minutes: "45",
  145. s: "4",
  146. ms: "54",
  147. });
  148. expect(persianDate.year()).toBe(1399);
  149. expect(persianDate.month()).toBe(6);
  150. expect(persianDate.date()).toBe(6);
  151. expect(persianDate.hour()).toBe(14);
  152. expect(persianDate.minute()).toBe(45);
  153. expect(persianDate.second()).toBe(4);
  154. expect(persianDate.millisecond()).toBe(54);
  155. persianDate.calendar("g").parse({
  156. year: "2020",
  157. M: "6",
  158. date: "6",
  159. hour: "14",
  160. minutes: "45",
  161. s: "4",
  162. ms: "54",
  163. });
  164. expect(persianDate.toDate()).toEqual(
  165. new Date("2020", "5", "6", "14", "45", "4", "54")
  166. );
  167. });
  168. test("parse function without parameter", () => {
  169. expect(persianDate.calendar("j").parse()).toEqual(persianDate.now());
  170. expect(persianDate.calendar("g").parse().toDate().toString()).toEqual(
  171. new Date().toString()
  172. );
  173. });
  174. test("isLeapYear function", () => {
  175. // static
  176. expect(PersianDate.isLeapYear("j", 1399)).toBe(true);
  177. expect(PersianDate.isLeapYear("j", 1400)).toBe(false);
  178. expect(PersianDate.isLeapYear("g", 2020)).toBe(true);
  179. expect(PersianDate.isLeapYear("g", 2021)).toBe(false);
  180. // non static
  181. expect(persianDate.calendar("j").isLeapYear(1399)).toBe(true);
  182. expect(persianDate.calendar("j").parse(1400).isLeapYear()).toBe(false);
  183. expect(persianDate.calendar("g").parse(2020).isLeapYear()).toBe(true);
  184. expect(persianDate.calendar("g").isLeapYear(2021)).toBe(false);
  185. });
  186. test("isValid function with valid date", () => {
  187. // static
  188. expect(PersianDate.isValid("j", 1399, 12, 30, 10, 20, 15, 123)).toBe(true);
  189. expect(PersianDate.isValid("g", 2020, 8, 31, 10, 20, 15, 123)).toBe(true);
  190. // non static
  191. expect(persianDate.calendar("j").isValid()).toBe(true);
  192. expect(persianDate.calendar("g").isValid()).toBe(true);
  193. });
  194. test("isValid function with invalid date", () => {
  195. // static
  196. expect(PersianDate.isValid("j", 1399, 45)).toBe(false);
  197. expect(PersianDate.isValid("j", 1399, 12, 31)).toBe(false);
  198. expect(PersianDate.isValid("g", 2020, 45)).toBe(false);
  199. expect(PersianDate.isValid("g", 2020, 2, 30)).toBe(false);
  200. // non static
  201. persianDate.calendar("j").parse("1399", "45");
  202. expect(persianDate.isValid()).toBe(false);
  203. persianDate.calendar("j").parse("1399", "12", "31");
  204. expect(persianDate.isValid()).toBe(false);
  205. persianDate.calendar("g").parse("2020-45");
  206. expect(persianDate.isValid()).toBe(false);
  207. persianDate.calendar("g").parse("2020-2-30");
  208. expect(persianDate.isValid()).toBe(false);
  209. });
  210. test("isValid function with valid time", () => {
  211. // static
  212. expect(PersianDate.isValid("j", 1399, 10, 10, 12)).toBe(true);
  213. expect(PersianDate.isValid("g", 2020, 10, 10, 12)).toBe(true);
  214. // non static
  215. persianDate.calendar("j").parse("1399/12/20 12:12");
  216. expect(persianDate.isValid()).toBe(true);
  217. });
  218. test("isValid function with invalid time", () => {
  219. // static
  220. expect(PersianDate.isValid("j", 1399, 10, 10, 25)).toBe(false);
  221. expect(PersianDate.isValid("g", 2020, 10, 10, 25)).toBe(false);
  222. // non static
  223. persianDate.calendar("j").parse("1399/12/20 45:12");
  224. expect(persianDate.isValid()).toBe(false);
  225. });
  226. test("getDaysInMonth function", () => {
  227. // static
  228. expect(PersianDate.getDaysInMonth("j", 1398, 12)).toBe(29);
  229. expect(PersianDate.getDaysInMonth("j", 1399, 12)).toBe(30);
  230. expect(PersianDate.getDaysInMonth("j", 1399, 11)).toBe(30);
  231. expect(PersianDate.getDaysInMonth("j", 1399, 10)).toBe(30);
  232. expect(PersianDate.getDaysInMonth("j", 1399, 9)).toBe(30);
  233. expect(PersianDate.getDaysInMonth("j", 1399, 8)).toBe(30);
  234. expect(PersianDate.getDaysInMonth("j", 1399, 7)).toBe(30);
  235. expect(PersianDate.getDaysInMonth("j", 1399, 6)).toBe(31);
  236. expect(PersianDate.getDaysInMonth("j", 1399, 5)).toBe(31);
  237. expect(PersianDate.getDaysInMonth("j", 1399, 4)).toBe(31);
  238. expect(PersianDate.getDaysInMonth("j", 1399, 3)).toBe(31);
  239. expect(PersianDate.getDaysInMonth("j", 1399, 2)).toBe(31);
  240. expect(PersianDate.getDaysInMonth("j", 1399, 1)).toBe(31);
  241. expect(PersianDate.getDaysInMonth("g", 2020, 1)).toBe(31);
  242. expect(PersianDate.getDaysInMonth("g", 2020, 2)).toBe(29);
  243. expect(PersianDate.getDaysInMonth("g", 2020, 3)).toBe(31);
  244. expect(PersianDate.getDaysInMonth("g", 2020, 4)).toBe(30);
  245. expect(PersianDate.getDaysInMonth("g", 2020, 5)).toBe(31);
  246. expect(PersianDate.getDaysInMonth("g", 2020, 6)).toBe(30);
  247. expect(PersianDate.getDaysInMonth("g", 2020, 7)).toBe(31);
  248. expect(PersianDate.getDaysInMonth("g", 2020, 8)).toBe(31);
  249. expect(PersianDate.getDaysInMonth("g", 2020, 9)).toBe(30);
  250. expect(PersianDate.getDaysInMonth("g", 2020, 10)).toBe(31);
  251. expect(PersianDate.getDaysInMonth("g", 2020, 11)).toBe(30);
  252. expect(PersianDate.getDaysInMonth("g", 2020, 12)).toBe(31);
  253. expect(PersianDate.getDaysInMonth("g", 2021, 2)).toBe(28);
  254. // non static
  255. persianDate.calendar("j").parse(1398, 12);
  256. expect(persianDate.getDaysInMonth()).toBe(29);
  257. persianDate.year(1399).month(12);
  258. expect(persianDate.getDaysInMonth()).toBe(30);
  259. persianDate.month(11);
  260. expect(persianDate.getDaysInMonth()).toBe(30);
  261. persianDate.month(10);
  262. expect(persianDate.getDaysInMonth()).toBe(30);
  263. persianDate.month(9);
  264. expect(persianDate.getDaysInMonth()).toBe(30);
  265. persianDate.month(8);
  266. expect(persianDate.getDaysInMonth()).toBe(30);
  267. persianDate.month(7);
  268. expect(persianDate.getDaysInMonth()).toBe(30);
  269. persianDate.month(6);
  270. expect(persianDate.getDaysInMonth()).toBe(31);
  271. persianDate.month(5);
  272. expect(persianDate.getDaysInMonth()).toBe(31);
  273. persianDate.month(4);
  274. expect(persianDate.getDaysInMonth()).toBe(31);
  275. persianDate.month(3);
  276. expect(persianDate.getDaysInMonth()).toBe(31);
  277. persianDate.month(2);
  278. expect(persianDate.getDaysInMonth()).toBe(31);
  279. persianDate.parse(1399, 1);
  280. expect(persianDate.getDaysInMonth()).toBe(31);
  281. persianDate.calendar("g").parse(2020, 1);
  282. expect(persianDate.getDaysInMonth()).toBe(31);
  283. persianDate.addMonth();
  284. expect(persianDate.getDaysInMonth()).toBe(29);
  285. persianDate.addMonth();
  286. expect(persianDate.getDaysInMonth()).toBe(31);
  287. persianDate.addMonth();
  288. expect(persianDate.getDaysInMonth()).toBe(30);
  289. persianDate.addMonth();
  290. expect(persianDate.getDaysInMonth()).toBe(31);
  291. persianDate.addMonth();
  292. expect(persianDate.getDaysInMonth()).toBe(30);
  293. persianDate.addMonth();
  294. expect(persianDate.getDaysInMonth()).toBe(31);
  295. persianDate.addMonth();
  296. expect(persianDate.getDaysInMonth()).toBe(31);
  297. persianDate.addMonth();
  298. expect(persianDate.getDaysInMonth()).toBe(30);
  299. persianDate.addMonth();
  300. expect(persianDate.getDaysInMonth()).toBe(31);
  301. persianDate.addMonth();
  302. expect(persianDate.getDaysInMonth()).toBe(30);
  303. persianDate.addMonth();
  304. expect(persianDate.getDaysInMonth()).toBe(31);
  305. persianDate.parse(2021, 2);
  306. expect(persianDate.getDaysInMonth()).toBe(28);
  307. });
  308. test("addYear function without parameter", () => {
  309. persianDate.calendar("j").parse("1399").addYear();
  310. expect(persianDate.year()).toBe(1400);
  311. expect(persianDate.month()).toBe(1);
  312. expect(persianDate.date()).toBe(1);
  313. persianDate.calendar("g").parse("2020").addYear();
  314. expect(persianDate.year()).toBe(2021);
  315. expect(persianDate.month()).toBe(1);
  316. expect(persianDate.date()).toBe(1);
  317. });
  318. test("addYear function with parameter and check date", () => {
  319. persianDate.calendar("j").parse("1399-12-30");
  320. persianDate.addYear("1");
  321. expect(persianDate.year()).toBe(1400);
  322. expect(persianDate.month()).toBe(12);
  323. expect(persianDate.date()).toBe(29);
  324. persianDate.calendar("g").parse("2020-2-29").addYear();
  325. expect(persianDate.year()).toBe(2021);
  326. expect(persianDate.month()).toBe(2);
  327. expect(persianDate.date()).toBe(28);
  328. });
  329. test("addYear function without check date", () => {
  330. persianDate.calendar("j").parse("1399-12-30");
  331. persianDate.addYear("1", false);
  332. expect(persianDate.isValid()).toBe(false);
  333. persianDate.calendar("g").parse("2020-2-29");
  334. persianDate.addYear("1", false);
  335. expect(persianDate.isValid()).toBe(false);
  336. });
  337. test("addMonth function without parameter", () => {
  338. persianDate.calendar("j").parse("1399-12-8");
  339. persianDate.addMonth();
  340. expect(persianDate.toString()).toBe("1400/01/08");
  341. persianDate.calendar("g").parse("2020-12-8");
  342. persianDate.addMonth();
  343. expect(persianDate.toString()).toBe("2021-01-08");
  344. });
  345. test("addMonth function with parameter and check date", () => {
  346. persianDate.calendar("j").parse("1399-6-31");
  347. persianDate.addMonth("4");
  348. expect(persianDate.toString()).toBe("1399/10/30");
  349. persianDate.calendar("g").parse("2020-1-31");
  350. persianDate.addMonth("3");
  351. expect(persianDate.toString()).toBe("2020-04-30");
  352. });
  353. test("addMonth function without check date", () => {
  354. persianDate.calendar("j").parse("1399-6-31");
  355. persianDate.addMonth("1", false);
  356. expect(persianDate.isValid()).toBe(false);
  357. persianDate.calendar("g").parse("2020-3-31");
  358. persianDate.addMonth("1", false);
  359. expect(persianDate.isValid()).toBe(false);
  360. });
  361. test("addDay function without parameter", () => {
  362. persianDate.calendar("j").parse("1399-12-30");
  363. persianDate.addDay();
  364. expect(persianDate.toString()).toBe("1400/01/01");
  365. persianDate.calendar("g").parse("2020-12-31");
  366. persianDate.addDay();
  367. expect(persianDate.toString()).toBe("2021-01-01");
  368. });
  369. test("addDay function with parameter and check date", () => {
  370. persianDate.calendar("j").parse("1399-12-30");
  371. persianDate.addDay("32");
  372. expect(persianDate.toString()).toBe("1400/02/01");
  373. persianDate.calendar("g").parse("2020-12-31");
  374. persianDate.addDay("32");
  375. expect(persianDate.toString()).toBe("2021-02-01");
  376. });
  377. test("addDay function without check date", () => {
  378. persianDate.calendar("j").parse("1399-12-1");
  379. persianDate.addDay("30", false);
  380. expect(persianDate.toString()).toBe("1400/01/01");
  381. persianDate.calendar("g").parse("2020-12-1");
  382. persianDate.addDay("31", false);
  383. expect(persianDate.toString()).toBe("2021-01-01");
  384. });
  385. test("addQuarter function without parameter", () => {
  386. persianDate.calendar("j").parse("1399-12-1");
  387. persianDate.addQuarter();
  388. expect(persianDate.toString()).toBe("1400/03/01");
  389. persianDate.calendar("g").parse("2020-12-1");
  390. persianDate.addQuarter();
  391. expect(persianDate.toString()).toBe("2021-03-01");
  392. });
  393. test("addQuarter function with parameter and check date", () => {
  394. persianDate.calendar("j").parse("1399-6-31");
  395. persianDate.addQuarter("2");
  396. expect(persianDate.toString()).toBe("1399/12/30");
  397. persianDate.calendar("g").parse("2020-6-30");
  398. persianDate.addQuarter("2");
  399. expect(persianDate.toString()).toBe("2020-12-30");
  400. });
  401. test("addQuarter function without check date", () => {
  402. persianDate.calendar("j").parse("1399-3-31");
  403. persianDate.addQuarter("6", false);
  404. expect(persianDate.isValid()).toBe(false);
  405. persianDate.calendar("g").parse("2020-3-31");
  406. persianDate.addQuarter("6", false);
  407. expect(persianDate.isValid()).toBe(false);
  408. });
  409. test("addWeek function without parameter", () => {
  410. persianDate.calendar("j").parse("1399-6-31");
  411. persianDate.addWeek();
  412. expect(persianDate.toString()).toBe("1399/07/07");
  413. persianDate.calendar("g").parse("2020-6-30");
  414. persianDate.addWeek();
  415. expect(persianDate.toString()).toBe("2020-07-07");
  416. });
  417. test("addWeek function with parameter and check date", () => {
  418. persianDate.calendar("j").parse("1399-6-1");
  419. persianDate.addWeek("3");
  420. expect(persianDate.toString()).toBe("1399/06/22");
  421. persianDate.calendar("g").parse("2020-6-1");
  422. persianDate.addWeek("3");
  423. expect(persianDate.toString()).toBe("2020-06-22");
  424. });
  425. test("addWeek function without check date", () => {
  426. persianDate.calendar("j").parse("1399-12-1");
  427. persianDate.addWeek("6", false);
  428. expect(persianDate.toString()).toBe("1400/01/13");
  429. persianDate.calendar("g").parse("2020-12-1");
  430. persianDate.addWeek("6", false);
  431. expect(persianDate.toString()).toBe("2021-01-12");
  432. });
  433. test("addHour function without parameter", () => {
  434. persianDate.calendar("j").parse("1399-6-31 23:10");
  435. persianDate.addHour();
  436. expect(persianDate.toString("datetime")).toBe("1399/07/01 00:10");
  437. persianDate.calendar("g").parse("2020-6-30 23:10");
  438. persianDate.addHour();
  439. expect(persianDate.toString("datetime")).toBe("2020-07-01 00:10");
  440. });
  441. test("addHour function with parameter and check time", () => {
  442. persianDate.calendar("j").parse("1399-8-30 23:10");
  443. persianDate.addHour("78");
  444. expect(persianDate.toString("datetime")).toBe("1399/09/04 05:10");
  445. persianDate.calendar("g").parse("2020-8-31 23:10");
  446. persianDate.addHour("78");
  447. expect(persianDate.toString("datetime")).toBe("2020-09-04 05:10");
  448. });
  449. test("addHour function without check time", () => {
  450. persianDate.calendar("j").parse("1399-12-30");
  451. persianDate.addHour("24", false);
  452. expect(persianDate.toString("datetime")).toBe("1400/01/01 00:00");
  453. persianDate.calendar("g").parse("2020-12-31");
  454. persianDate.addHour("24", false);
  455. expect(persianDate.toString("datetime")).toBe("2021-01-01 00:00");
  456. });
  457. test("addMinute function without parameter", () => {
  458. persianDate.calendar("j").parse("1399-6-31 23:59");
  459. persianDate.addMinute();
  460. expect(persianDate.toString("datetime")).toBe("1399/07/01 00:00");
  461. persianDate.calendar("g").parse("2020-6-30 23:59");
  462. persianDate.addMinute();
  463. expect(persianDate.toString("datetime")).toBe("2020-07-01 00:00");
  464. });
  465. test("addMinute function with parameter and check time", () => {
  466. persianDate.calendar("j").parse("1399-8-30 23:10");
  467. persianDate.addMinute("1440");
  468. expect(persianDate.toString("datetime")).toBe("1399/09/01 23:10");
  469. persianDate.calendar("g").parse("2020-8-31 23:10");
  470. persianDate.addMinute("1440");
  471. expect(persianDate.toString("datetime")).toBe("2020-09-01 23:10");
  472. });
  473. test("addMinute function without check time", () => {
  474. persianDate.calendar("j").parse("1399-12-30 23:59");
  475. persianDate.addMinute("1", false);
  476. expect(persianDate.toString("datetime")).toBe("1400/01/01 00:00");
  477. persianDate.calendar("g").parse("2020-12-31 23:59");
  478. persianDate.addMinute("1", false);
  479. expect(persianDate.toString("datetime")).toBe("2021-01-01 00:00");
  480. });
  481. test("addSecond function without parameter", () => {
  482. persianDate.calendar("j").parse("1399-6-31 23:59:59");
  483. persianDate.addSecond();
  484. expect(persianDate.toString("datetime:ss")).toBe("1399/07/01 00:00:00");
  485. persianDate.calendar("g").parse("2020-6-30 23:59:59");
  486. persianDate.addSecond();
  487. expect(persianDate.toString("datetime:ss")).toBe("2020-07-01 00:00:00");
  488. });
  489. test("addSecond function with parameter and check time", () => {
  490. persianDate.calendar("j").parse("1399-8-30 23:00");
  491. persianDate.addSecond("3600");
  492. expect(persianDate.toString("datetime:ss")).toBe("1399/09/01 00:00:00");
  493. persianDate.calendar("g").parse("2020-8-31 23:00");
  494. persianDate.addSecond("3600");
  495. expect(persianDate.toString("datetime:ss")).toBe("2020-09-01 00:00:00");
  496. });
  497. test("addSecond function without check time", () => {
  498. persianDate.calendar("j").parse("1399-12-30 23:59:59");
  499. persianDate.addSecond("1", false);
  500. expect(persianDate.toString("datetime:ss")).toBe("1400/01/01 00:00:00");
  501. persianDate.calendar("g").parse("2020-12-31 23:59:59");
  502. persianDate.addSecond("1", false);
  503. expect(persianDate.toString("datetime:ss")).toBe("2021-01-01 00:00:00");
  504. });
  505. test("addMillisecond function without parameter", () => {
  506. persianDate.calendar("j").parse("1399-6-31 23:59:59.999");
  507. persianDate.addMillisecond();
  508. expect(persianDate.toString("datetime:ss.c")).toBe("1399/07/01 00:00:00.0");
  509. persianDate.calendar("g").parse("2020-6-30 23:59:59.999");
  510. persianDate.addMillisecond();
  511. expect(persianDate.toString("datetime:ss.c")).toBe("2020-07-01 00:00:00.0");
  512. });
  513. test("addMillisecond function with parameter and check time", () => {
  514. persianDate.calendar("j").parse("1399-8-30 23:00");
  515. persianDate.addMillisecond("3600000");
  516. expect(persianDate.toString("datetime:ss.c")).toBe("1399/09/01 00:00:00.0");
  517. persianDate.calendar("g").parse("2020-8-31 23:00");
  518. persianDate.addMillisecond("3600000");
  519. expect(persianDate.toString("datetime:ss.c")).toBe("2020-09-01 00:00:00.0");
  520. });
  521. test("addMillisecond function without check time", () => {
  522. persianDate.calendar("j").parse("1399-12-30 23:59:59.999");
  523. persianDate.addMillisecond("1", false);
  524. expect(persianDate.toString("datetime:ss.c")).toBe("1400/01/01 00:00:00.0");
  525. persianDate.calendar("g").parse("2020-12-31 23:59:59.999");
  526. persianDate.addMillisecond("1", false);
  527. expect(persianDate.toString("datetime:ss.c")).toBe("2021-01-01 00:00:00.0");
  528. });
  529. test("subYear function without parameter", () => {
  530. persianDate.calendar("j").parse("1400").subYear();
  531. expect(persianDate.toString()).toBe("1399/01/01");
  532. persianDate.calendar("g").parse("2021").subYear();
  533. expect(persianDate.toString()).toBe("2020-01-01");
  534. });
  535. test("subYear function with parameter and check date", () => {
  536. persianDate.calendar("j").parse("1399-12-30");
  537. persianDate.subYear("1");
  538. expect(persianDate.toString()).toBe("1398/12/29");
  539. persianDate.calendar("g").parse("2020-2-29");
  540. persianDate.subYear("1");
  541. expect(persianDate.toString()).toBe("2019-02-28");
  542. });
  543. test("subYear function without check date", () => {
  544. persianDate.calendar("j").parse("1399-12-30");
  545. persianDate.subYear("1", false);
  546. expect(persianDate.isValid()).toBe(false);
  547. persianDate.calendar("g").parse("2020-2-29");
  548. persianDate.subYear("1", false);
  549. expect(persianDate.isValid()).toBe(false);
  550. });
  551. test("subMonth function without parameter", () => {
  552. persianDate.calendar("j").parse("1399-1-8");
  553. persianDate.subMonth();
  554. expect(persianDate.toString()).toBe("1398/12/08");
  555. persianDate.calendar("g").parse("2020-1-8");
  556. persianDate.subMonth();
  557. expect(persianDate.toString()).toBe("2019-12-08");
  558. });
  559. test("subMonth function with parameter and check date", () => {
  560. persianDate.calendar("j").parse("1399-2-31");
  561. persianDate.subMonth("4");
  562. expect(persianDate.toString()).toBe("1398/10/30");
  563. persianDate.calendar("g").parse("2020-7-31");
  564. persianDate.subMonth("3");
  565. expect(persianDate.toString()).toBe("2020-04-30");
  566. });
  567. test("subMonth function without check date", () => {
  568. persianDate.calendar("j").parse("1399-1-31");
  569. persianDate.subMonth("1", false);
  570. expect(persianDate.isValid()).toBe(false);
  571. persianDate.calendar("g").parse("2021-12-31");
  572. persianDate.subMonth("1", false);
  573. expect(persianDate.isValid()).toBe(false);
  574. });
  575. test("subDay function without parameter", () => {
  576. persianDate.calendar("j").parse("1400-1-1");
  577. persianDate.subDay();
  578. expect(persianDate.toString()).toBe("1399/12/30");
  579. persianDate.calendar("g").parse("2021-1-1");
  580. persianDate.subDay();
  581. expect(persianDate.toString()).toBe("2020-12-31");
  582. });
  583. test("subDay function with parameter and check date", () => {
  584. persianDate.calendar("j").parse("1399-1-30");
  585. persianDate.subDay("32");
  586. expect(persianDate.toString()).toBe("1398/12/27");
  587. persianDate.calendar("g").parse("2020-3-30");
  588. persianDate.subDay("32");
  589. expect(persianDate.toString()).toBe("2020-02-27");
  590. });
  591. test("subDay function without check date", () => {
  592. persianDate.calendar("j").parse("1400-1-1");
  593. persianDate.subDay("30", false);
  594. expect(persianDate.toString()).toBe("1399/12/01");
  595. persianDate.calendar("g").parse("2020-1-1");
  596. persianDate.subDay("31", false);
  597. expect(persianDate.toString()).toBe("2019-12-01");
  598. });
  599. test("subQuarter function without parameter", () => {
  600. persianDate.calendar("j").parse("1399-2-1");
  601. persianDate.subQuarter();
  602. expect(persianDate.toString()).toBe("1398/11/01");
  603. persianDate.calendar("g").parse("2020-2-1");
  604. persianDate.subQuarter();
  605. expect(persianDate.toString()).toBe("2019-11-01");
  606. });
  607. test("subQuarter function with parameter and check date", () => {
  608. persianDate.calendar("j").parse("1399-6-31");
  609. persianDate.subQuarter("2");
  610. expect(persianDate.toString()).toBe("1398/12/29");
  611. persianDate.calendar("g").parse("2020-8-30");
  612. persianDate.subQuarter("2");
  613. expect(persianDate.toString()).toBe("2020-02-29");
  614. });
  615. test("subQuarter function without check date", () => {
  616. persianDate.calendar("j").parse("1399-3-31");
  617. persianDate.subQuarter("6", false);
  618. expect(persianDate.isValid()).toBe(false);
  619. persianDate.calendar("g").parse("2020-5-31");
  620. persianDate.subQuarter("1", false);
  621. expect(persianDate.isValid()).toBe(false);
  622. });
  623. test("subWeek function without parameter", () => {
  624. persianDate.calendar("j").parse("1399-7-7");
  625. persianDate.subWeek();
  626. expect(persianDate.toString()).toBe("1399/06/31");
  627. persianDate.calendar("g").parse("2020-7-7");
  628. persianDate.subWeek();
  629. expect(persianDate.toString()).toBe("2020-06-30");
  630. });
  631. test("subWeek function with parameter and check date", () => {
  632. persianDate.calendar("j").parse("1399-6-22");
  633. persianDate.subWeek("3");
  634. expect(persianDate.toString()).toBe("1399/06/01");
  635. persianDate.calendar("g").parse("2020-6-22");
  636. persianDate.subWeek("3");
  637. expect(persianDate.toString()).toBe("2020-06-01");
  638. });
  639. test("subWeek function without check date", () => {
  640. persianDate.calendar("j").parse("1400-1-13");
  641. persianDate.subWeek("6", false);
  642. expect(persianDate.toString()).toBe("1399/12/01");
  643. persianDate.calendar("g").parse("2021-1-13");
  644. persianDate.subWeek("6", false);
  645. expect(persianDate.toString()).toBe("2020-12-02");
  646. });
  647. test("subHour function without parameter", () => {
  648. persianDate.calendar("j").parse("1399-6-31 00:10");
  649. persianDate.subHour();
  650. expect(persianDate.toString("datetime")).toBe("1399/06/30 23:10");
  651. persianDate.calendar("g").parse("2020-6-30 00:10");
  652. persianDate.subHour();
  653. expect(persianDate.toString("datetime")).toBe("2020-06-29 23:10");
  654. });
  655. test("subHour function with parameter and check time", () => {
  656. persianDate.calendar("j").parse("1399-9-4 5:10");
  657. persianDate.subHour("78");
  658. expect(persianDate.toString("datetime")).toBe("1399/08/30 23:10");
  659. persianDate.calendar("g").parse("2020-9-4 5:10");
  660. persianDate.subHour("78");
  661. expect(persianDate.toString("datetime")).toBe("2020-08-31 23:10");
  662. });
  663. test("subHour function without check time", () => {
  664. persianDate.calendar("j").parse("1399-12-1");
  665. persianDate.subHour("24", false);
  666. expect(persianDate.toString("datetime")).toBe("1399/11/30 00:00");
  667. persianDate.calendar("g").parse("2020-12-1");
  668. persianDate.subHour("24", false);
  669. expect(persianDate.toString("datetime")).toBe("2020-11-30 00:00");
  670. });
  671. test("subMinute function without parameter", () => {
  672. persianDate.calendar("j").parse("1399-6-31 00:00");
  673. persianDate.subMinute();
  674. expect(persianDate.toString("datetime")).toBe("1399/06/30 23:59");
  675. persianDate.calendar("g").parse("2020-6-30 00:00");
  676. persianDate.subMinute();
  677. expect(persianDate.toString("datetime")).toBe("2020-06-29 23:59");
  678. });
  679. test("subMinute function with parameter and check time", () => {
  680. persianDate.calendar("j").parse("1399-8-30 23:10");
  681. persianDate.subMinute("1440");
  682. expect(persianDate.toString("datetime")).toBe("1399/08/29 23:10");
  683. persianDate.calendar("g").parse("2020-8-31 23:10");
  684. persianDate.subMinute("1440");
  685. expect(persianDate.toString("datetime")).toBe("2020-08-30 23:10");
  686. });
  687. test("subMinute function without check time", () => {
  688. persianDate.calendar("j").parse("1399-12-30 00:00");
  689. persianDate.subMinute("1", false);
  690. expect(persianDate.toString("datetime")).toBe("1399/12/29 23:59");
  691. persianDate.calendar("g").parse("2020-12-31 00:00");
  692. persianDate.subMinute("1", false);
  693. expect(persianDate.toString("datetime")).toBe("2020-12-30 23:59");
  694. });
  695. test("subSecond function without parameter", () => {
  696. persianDate.calendar("j").parse("1399-6-31 00:00:00");
  697. persianDate.subSecond();
  698. expect(persianDate.toString("datetime:ss")).toBe("1399/06/30 23:59:59");
  699. persianDate.calendar("g").parse("2020-6-30 00:00:00");
  700. persianDate.subSecond();
  701. expect(persianDate.toString("datetime:ss")).toBe("2020-06-29 23:59:59");
  702. });
  703. test("subSecond function with parameter and check time", () => {
  704. persianDate.calendar("j").parse("1399-8-30 1:00");
  705. persianDate.subSecond("3600");
  706. expect(persianDate.toString("datetime:ss")).toBe("1399/08/30 00:00:00");
  707. persianDate.calendar("g").parse("2020-8-31 1:00");
  708. persianDate.subSecond("3600");
  709. expect(persianDate.toString("datetime:ss")).toBe("2020-08-31 00:00:00");
  710. });
  711. test("subSecond function without check time", () => {
  712. persianDate.calendar("j").parse("1400-1-1 00:00:00");
  713. persianDate.subSecond("1", false);
  714. expect(persianDate.toString("datetime:ss")).toBe("1399/12/30 23:59:59");
  715. persianDate.calendar("g").parse("2021-1-1 00:00:00");
  716. persianDate.subSecond("1", false);
  717. expect(persianDate.toString("datetime:ss")).toBe("2020-12-31 23:59:59");
  718. });
  719. test("subMillisecond function without parameter", () => {
  720. persianDate.calendar("j").parse("1399-7-1");
  721. persianDate.subMillisecond();
  722. expect(persianDate.toString("datetime:ss.c")).toBe("1399/06/31 23:59:59.999");
  723. persianDate.calendar("g").parse("2020-7-1");
  724. persianDate.subMillisecond();
  725. expect(persianDate.toString("datetime:ss.c")).toBe("2020-06-30 23:59:59.999");
  726. });
  727. test("subMillisecond function with parameter and check time", () => {
  728. persianDate.calendar("j").parse("1399-8-30 00:00");
  729. persianDate.subMillisecond("3600000");
  730. expect(persianDate.toString("datetime:ss.c")).toBe("1399/08/29 23:00:00.0");
  731. persianDate.calendar("g").parse("2020-8-31 00:00");
  732. persianDate.subMillisecond("3600000");
  733. expect(persianDate.toString("datetime:ss.c")).toBe("2020-08-30 23:00:00.0");
  734. });
  735. test("subMillisecond function without check time", () => {
  736. persianDate.calendar("j").parse("1400-1-1");
  737. persianDate.subMillisecond("1", false);
  738. expect(persianDate.toString("datetime:ss.c")).toBe("1399/12/30 23:59:59.999");
  739. persianDate.calendar("g").parse("2021-1-1");
  740. persianDate.subMillisecond("1", false);
  741. expect(persianDate.toString("datetime:ss.c")).toBe("2020-12-31 23:59:59.999");
  742. });
  743. test("toString function with jalali calendar", () => {
  744. persianDate.calendar("j").parse("1400-1-1 15:54:56.856");
  745. expect(persianDate.toString()).toBe("1400/01/01");
  746. expect(persianDate.toString("date")).toBe("1400/01/01");
  747. expect(persianDate.toString("datetime")).toBe("1400/01/01 15:54");
  748. expect(persianDate.toString("time")).toBe("15:54");
  749. expect(persianDate.toString("YYYY|YY|y")).toBe("2021|21|2021");
  750. expect(persianDate.toString("jYYYY|jYY|jy")).toBe("1400|00|1400");
  751. expect(persianDate.toString("Qo|QO|Q")).toBe("1st|1st|1");
  752. expect(persianDate.toString("jQo|jQO|jQ")).toBe("اول|اولین|1");
  753. expect(persianDate.toString("MMMM|MMM|MM|Mo|MO|M")).toBe(
  754. "March|Mar|03|3rd|3rd|3"
  755. );
  756. expect(persianDate.toString("jMMMM|jMMM|jMM|jMo|jMO|jM")).toBe(
  757. "فروردین|فروردین|01|اول|اولین|1"
  758. );
  759. expect(persianDate.toString("DDDD|DDDo|DDDO|DDD|DD|Do|DO|D")).toBe(
  760. "080|80th|80th|80|21|21st|21st|21"
  761. );
  762. expect(persianDate.toString("jDDDD|jDDDo|jDDDO|jDDD|jDD|jDo|jDO|jD")).toBe(
  763. "001|اول|اولین|1|01|اول|اولین|1"
  764. );
  765. expect(persianDate.toString("dddd|ddd|dd|do|dO|d|de")).toBe(
  766. "Sunday|Sun|Su|1st|1st|0|1"
  767. );
  768. expect(persianDate.toString("jdddd|jddd|jdd|jdo|jdO|jd|jde")).toBe(
  769. "یکشنبه|یکشنبه|ی|دوم|دومین|1|2"
  770. );
  771. expect(persianDate.toString("ww|WW|wo|Wo|wO|WO|w|W")).toBe(
  772. "12|12|12th|12th|12th|12th|12|12"
  773. );
  774. expect(persianDate.toString("jww|jWW|jwo|jWo|jwO|jWO|jw|jW")).toBe(
  775. "01|01|اول|اول|اولین|اولین|1|1"
  776. );
  777. expect(persianDate.toString("HH|hh|H|h|kk|k")).toBe("15|03|15|3|15|15");
  778. expect(persianDate.toString("mm|m")).toBe("54|54");
  779. expect(persianDate.toString("ss|s")).toBe("56|56");
  780. expect(persianDate.toString("CCCC|CCC|c")).toBe("856|856|856");
  781. expect(persianDate.toString("t")).toBe("1616329496856");
  782. expect(persianDate.toString("aa|a|A|jaa|ja|jA")).toBe(
  783. "P.M.|pm|PM|ب.ظ|ب ظ|بعد از ظهر"
  784. );
  785. expect(persianDate.toString("`the value is:` date")).toBe(
  786. "the value is: 1400/01/01"
  787. );
  788. expect(persianDate.toString("jYYYY `is a good year.`")).toBe(
  789. "1400 is a good year."
  790. );
  791. expect(persianDate.toString("`it's` h `O'Clock`")).toBe("it's 3 O'Clock");
  792. expect(persianDate.toString("`what's the date?` ?YYYY ?MM ?DD")).toBe(
  793. "what's the date? 1400 01 01"
  794. );
  795. });
  796. test("toString function with gregorian calendar", () => {
  797. persianDate.calendar("g").parse("2020-1-1 15:54:56.856");
  798. expect(persianDate.toString()).toBe("2020-01-01");
  799. expect(persianDate.toString("date")).toBe("2020-01-01");
  800. expect(persianDate.toString("datetime")).toBe("2020-01-01 15:54");
  801. expect(persianDate.toString("time")).toBe("15:54");
  802. expect(persianDate.toString("YYYY|YY|y")).toBe("2020|20|2020");
  803. expect(persianDate.toString("jYYYY|jYY|jy")).toBe("1398|98|1398");
  804. expect(persianDate.toString("Qo|QO|Q")).toBe("1st|1st|1");
  805. expect(persianDate.toString("jQo|jQO|jQ")).toBe("چهارم|چهارمین|4");
  806. expect(persianDate.toString("MMMM|MMM|MM|Mo|MO|M")).toBe(
  807. "January|Jan|01|1st|1st|1"
  808. );
  809. expect(persianDate.toString("jMMMM|jMMM|jMM|jMo|jMO|jM")).toBe(
  810. "دی|دی|10|دهم|دهمین|10"
  811. );
  812. expect(persianDate.toString("DDDD|DDDo|DDDO|DDD|DD|Do|DO|D")).toBe(
  813. "001|1st|1st|1|01|1st|1st|1"
  814. );
  815. expect(persianDate.toString("jDDDD|jDDDo|jDDDO|jDDD|jDD|jDo|jDO|jD")).toBe(
  816. "287|دویست و هشتاد و هفتم|دویست و هشتاد و هفتمین|287|11|یازدهم|یازدهمین|11"
  817. );
  818. expect(persianDate.toString("dddd|ddd|dd|do|dO|d|de")).toBe(
  819. "Wednesday|Wed|We|4th|4th|3|4"
  820. );
  821. expect(persianDate.toString("jdddd|jddd|jdd|jdo|jdO|jd|jde")).toBe(
  822. "چهارشنبه|چهارشنبه|چ|پنجم|پنجمین|4|5"
  823. );
  824. expect(persianDate.toString("ww|WW|wo|Wo|wO|WO|w|W")).toBe(
  825. "01|01|1st|1st|1st|1st|1|1"
  826. );
  827. expect(persianDate.toString("jww|jWW|jwo|jWo|jwO|jWO|jw|jW")).toBe(
  828. "41|41|چهل و یکم|چهل و یکم|چهل و یکمین|چهل و یکمین|41|41"
  829. );
  830. expect(persianDate.toString("HH|hh|H|h|kk|k")).toBe("15|03|15|3|15|15");
  831. expect(persianDate.toString("mm|m")).toBe("54|54");
  832. expect(persianDate.toString("ss|s")).toBe("56|56");
  833. expect(persianDate.toString("CCCC|CCC|c")).toBe("856|856|856");
  834. expect(persianDate.toString("t")).toBe("1577881496856");
  835. expect(persianDate.toString("aa|a|A|jaa|ja|jA")).toBe(
  836. "P.M.|pm|PM|ب.ظ|ب ظ|بعد از ظهر"
  837. );
  838. expect(persianDate.toString("`the value is:` date")).toBe(
  839. "the value is: 2020-01-01"
  840. );
  841. expect(persianDate.toString("YYYY `is a good year.`")).toBe(
  842. "2020 is a good year."
  843. );
  844. expect(persianDate.toString("`it's` h `O'Clock`")).toBe("it's 3 O'Clock");
  845. expect(persianDate.toString("`what's the date?` ?YYYY ?MM ?DD")).toBe(
  846. "what's the date? 2020 01 01"
  847. );
  848. });
  849. test("year function", () => {
  850. persianDate.calendar("j").parse("1399-7-1");
  851. persianDate.year("1405");
  852. expect(persianDate.toString()).toBe("1405/07/01");
  853. persianDate.calendar("g").parse("2020-7-1");
  854. persianDate.year("2025");
  855. expect(persianDate.toString()).toBe("2025-07-01");
  856. });
  857. test("month function", () => {
  858. persianDate.calendar("j").parse("1399-7-1");
  859. persianDate.month("5");
  860. expect(persianDate.toString()).toBe("1399/05/01");
  861. persianDate.month("13");
  862. expect(persianDate.toString()).toBe("1400/01/01");
  863. persianDate.parse("1399-7-1");
  864. persianDate.month("0");
  865. expect(persianDate.toString()).toBe("1398/12/01");
  866. persianDate.calendar("g").parse("2020-7-1");
  867. persianDate.month("5");
  868. expect(persianDate.toString()).toBe("2020-05-01");
  869. persianDate.month("13");
  870. expect(persianDate.toString()).toBe("2021-01-01");
  871. persianDate.parse("2020-7-1");
  872. persianDate.month("0");
  873. expect(persianDate.toString()).toBe("2019-12-01");
  874. });
  875. test("date function", () => {
  876. persianDate.calendar("j").parse("1399-7-1");
  877. persianDate.date("5");
  878. expect(persianDate.toString()).toBe("1399/07/05");
  879. persianDate.date("0");
  880. expect(persianDate.toString()).toBe("1399/06/31");
  881. persianDate.parse("1399-7-1");
  882. persianDate.date("32");
  883. expect(persianDate.toString()).toBe("1399/08/02");
  884. persianDate.calendar("g").parse("2020-7-1");
  885. persianDate.date("5");
  886. expect(persianDate.toString()).toBe("2020-07-05");
  887. persianDate.date("0");
  888. expect(persianDate.toString()).toBe("2020-06-30");
  889. persianDate.parse("2020-7-1");
  890. persianDate.date("32");
  891. expect(persianDate.toString()).toBe("2020-08-01");
  892. });
  893. test("quarter function", () => {
  894. persianDate.calendar("j").parse("1399-7-5");
  895. persianDate.quarter("2");
  896. expect(persianDate.toString()).toBe("1399/04/05");
  897. persianDate.quarter("0");
  898. expect(persianDate.toString()).toBe("1398/10/05");
  899. persianDate.parse("1399-7-5");
  900. persianDate.quarter("5");
  901. expect(persianDate.toString()).toBe("1400/03/05");
  902. persianDate.calendar("g").parse("2020-7-5");
  903. persianDate.quarter("2");
  904. expect(persianDate.toString()).toBe("2020-04-05");
  905. persianDate.quarter("0");
  906. expect(persianDate.toString()).toBe("2019-10-05");
  907. persianDate.parse("2020-7-5");
  908. persianDate.quarter("5");
  909. expect(persianDate.toString()).toBe("2021-03-05");
  910. });
  911. test("week function", () => {
  912. persianDate.calendar("j").parse("1399-7-1");
  913. persianDate.week("23");
  914. expect(persianDate.toString()).toBe("1399/06/04");
  915. persianDate.week("0");
  916. expect(persianDate.toString()).toBe("1398/12/27");
  917. persianDate.parse("1399-7-1");
  918. persianDate.week("54");
  919. expect(persianDate.toString()).toBe("1400/01/10");
  920. persianDate.calendar("g").parse("2020-7-1");
  921. persianDate.week("23");
  922. expect(persianDate.toString()).toBe("2020-06-03");
  923. persianDate.week("0");
  924. expect(persianDate.toString()).toBe("2019-12-25");
  925. persianDate.parse("2020-7-1");
  926. persianDate.week("54");
  927. expect(persianDate.toString()).toBe("2021-01-06");
  928. });
  929. test("hour function", () => {
  930. persianDate.calendar("j").parse("1399-7-1");
  931. persianDate.hour("23");
  932. expect(persianDate.toString("time")).toBe("23:00");
  933. persianDate.hour("0");
  934. expect(persianDate.toString("datetime")).toBe("1399/07/01 00:00");
  935. persianDate.hour("24");
  936. expect(persianDate.toString("datetime")).toBe("1399/07/02 00:00");
  937. persianDate.calendar("g").parse("2020-7-1");
  938. persianDate.hour("23");
  939. expect(persianDate.toString("time")).toBe("23:00");
  940. persianDate.hour("0");
  941. expect(persianDate.toString("datetime")).toBe("2020-07-01 00:00");
  942. persianDate.hour("24");
  943. expect(persianDate.toString("datetime")).toBe("2020-07-02 00:00");
  944. });
  945. test("minute function", () => {
  946. persianDate.calendar("j").parse("1399-7-1");
  947. persianDate.minute("59");
  948. expect(persianDate.toString("time")).toBe("00:59");
  949. persianDate.minute("0");
  950. expect(persianDate.toString("time")).toBe("00:00");
  951. persianDate.minute("60");
  952. expect(persianDate.toString("time")).toBe("01:00");
  953. persianDate.calendar("g").parse("2020-7-1");
  954. persianDate.minute("59");
  955. expect(persianDate.toString("time")).toBe("00:59");
  956. persianDate.minute("0");
  957. expect(persianDate.toString("time")).toBe("00:00");
  958. persianDate.minute("60");
  959. expect(persianDate.toString("time")).toBe("01:00");
  960. });
  961. test("second function", () => {
  962. persianDate.calendar("j").parse("1399-7-1");
  963. persianDate.second("59");
  964. expect(persianDate.toString("s")).toBe("59");
  965. persianDate.second("0");
  966. expect(persianDate.toString("s")).toBe("0");
  967. persianDate.second("60");
  968. expect(persianDate.toString("m:s")).toBe("1:0");
  969. persianDate.calendar("g").parse("2020-7-1");
  970. persianDate.second("59");
  971. expect(persianDate.toString("s")).toBe("59");
  972. persianDate.second("0");
  973. expect(persianDate.toString("s")).toBe("0");
  974. persianDate.second("60");
  975. expect(persianDate.toString("m:s")).toBe("1:0");
  976. });
  977. test("millisecond function", () => {
  978. persianDate.calendar("j").parse("1399-7-1");
  979. persianDate.millisecond("999");
  980. expect(persianDate.toString("c")).toBe("999");
  981. persianDate.millisecond("0");
  982. expect(persianDate.toString("c")).toBe("0");
  983. persianDate.millisecond("1000");
  984. expect(persianDate.toString("s:c")).toBe("1:0");
  985. persianDate.calendar("g").parse("2020-7-1");
  986. persianDate.millisecond("999");
  987. expect(persianDate.toString("c")).toBe("999");
  988. persianDate.millisecond("0");
  989. expect(persianDate.toString("c")).toBe("0");
  990. persianDate.millisecond("1000");
  991. expect(persianDate.toString("s:c")).toBe("1:0");
  992. });
  993. test("timestamp function without parameter", () => {
  994. persianDate.calendar("j").parse("1399-6-11");
  995. expect(persianDate.timestamp()).toBe(
  996. new Date(2020, 8, 1, 0, 0, 0, 0).getTime()
  997. );
  998. persianDate.calendar("g").parse("2020-6-11");
  999. expect(persianDate.timestamp()).toBe(
  1000. new Date(2020, 5, 11, 0, 0, 0, 0).getTime()
  1001. );
  1002. });
  1003. test("timestamp function with parameter", () => {
  1004. persianDate
  1005. .calendar("j")
  1006. .timestamp(new Date(2020, 7, 22, 0, 0, 0, 0).getTime());
  1007. expect(persianDate.toString("datetime")).toBe("1399/06/01 00:00");
  1008. persianDate
  1009. .calendar("g")
  1010. .timestamp(new Date(2020, 6, 22, 0, 0, 0, 0).getTime());
  1011. expect(persianDate.toString("datetime")).toBe("2020-07-22 00:00");
  1012. });
  1013. ////////////////////--- Version 1.1.0 ---////////////////////
  1014. test("clone function", () => {
  1015. let clone = persianDate.calendar("j").parse("1399/6/1 12:20:30.235").clone();
  1016. expect(clone.toString("datetime:ss.c")).toBe("1399/06/01 12:20:30.235");
  1017. clone.addYear();
  1018. expect(clone.year()).toBe(persianDate.year() + 1);
  1019. clone = persianDate.calendar("g").parse("2020-6-1 12:20:30.235").clone();
  1020. expect(clone.toString("datetime:ss.c")).toBe("2020-06-01 12:20:30.235");
  1021. clone.addYear();
  1022. expect(clone.year()).toBe(persianDate.year() + 1);
  1023. });
  1024. test("isSame function", () => {
  1025. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  1026. expect(persianDate.isSame(1399, "6", 1, "12", 20, 30, 235)).toBe(true);
  1027. expect(persianDate.isSame([1399, 7])).toBe(false);
  1028. expect(persianDate.isSame(new PersianDate())).toBe(false);
  1029. expect(persianDate.isSame(new Date(2020, 7, 22, 12, 20, 30, 235))).toBe(true);
  1030. expect(
  1031. persianDate.isSame({
  1032. year: 1399,
  1033. month: 6,
  1034. date: 24,
  1035. hour: 11,
  1036. minute: 2,
  1037. second: 55,
  1038. millisecond: 112,
  1039. })
  1040. ).toBe(false);
  1041. expect(persianDate.isSame("1399/6/1")).toBe(true);
  1042. expect(persianDate.isSame("1399/13/1")).toBe(false);
  1043. expect(persianDate.isSame()).toBe(false);
  1044. expect(persianDate.isSame(1399, "6", 1, "12", 20, 30, 0)).toBe(false);
  1045. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  1046. expect(persianDate.isSame(2020, "6", 1, "12", 20, 30, 235)).toBe(true);
  1047. expect(persianDate.isSame([2020, 7])).toBe(false);
  1048. expect(persianDate.isSame(new PersianDate())).toBe(false);
  1049. expect(persianDate.isSame(new Date(2020, 5, 1, 12, 20, 30, 235))).toBe(true);
  1050. expect(
  1051. persianDate.isSame({
  1052. year: 2020,
  1053. month: 6,
  1054. date: 24,
  1055. hour: 11,
  1056. minute: 2,
  1057. second: 55,
  1058. millisecond: 112,
  1059. })
  1060. ).toBe(false);
  1061. expect(persianDate.isSame("2020-6-1")).toBe(true);
  1062. expect(persianDate.isSame("2020-13-1")).toBe(false);
  1063. expect(persianDate.isSame()).toBe(false);
  1064. expect(persianDate.isSame(2020, "6", 1, "12", 20, 30, 0)).toBe(false);
  1065. });
  1066. ////////////////////--- Version 1.2.0 ---////////////////////
  1067. test("isBefore function", () => {
  1068. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  1069. expect(persianDate.isBefore(1399, "6", 1, "12", 20, 30, 235)).toBe(false);
  1070. expect(persianDate.isBefore([1399, 7])).toBe(true);
  1071. expect(persianDate.isBefore(new PersianDate())).toBe(true);
  1072. expect(persianDate.isBefore(new Date(2020, 7, 22, 12, 20, 30, 234))).toBe(
  1073. false
  1074. );
  1075. expect(
  1076. persianDate.isBefore({
  1077. year: 1399,
  1078. month: 6,
  1079. date: 24,
  1080. hour: 11,
  1081. minute: 2,
  1082. second: 55,
  1083. millisecond: 112,
  1084. })
  1085. ).toBe(true);
  1086. expect(persianDate.isBefore("1399/6/2")).toBe(true);
  1087. expect(persianDate.isBefore("1399/13/1")).toBe(false);
  1088. expect(persianDate.isBefore()).toBe(true);
  1089. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  1090. expect(persianDate.isBefore(2020, "6", 1, "12", 20, 30, 235)).toBe(false);
  1091. expect(persianDate.isBefore([2020, 7])).toBe(true);
  1092. expect(persianDate.isBefore(new PersianDate())).toBe(true);
  1093. expect(persianDate.isBefore(new Date(2020, 5, 1, 12, 20, 30, 234))).toBe(
  1094. false
  1095. );
  1096. expect(
  1097. persianDate.isBefore({
  1098. year: 2020,
  1099. month: 6,
  1100. date: 24,
  1101. hour: 11,
  1102. minute: 2,
  1103. second: 55,
  1104. millisecond: 112,
  1105. })
  1106. ).toBe(true);
  1107. expect(persianDate.isBefore("2020-6-2")).toBe(true);
  1108. expect(persianDate.isBefore("2020-13-1")).toBe(false);
  1109. expect(persianDate.isBefore()).toBe(true);
  1110. });
  1111. test("isAfter function", () => {
  1112. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  1113. expect(persianDate.isAfter(1399, "6", 1, "12", 20, 30, 235)).toBe(false);
  1114. expect(persianDate.isAfter([1399, 5])).toBe(true);
  1115. expect(persianDate.isAfter(new PersianDate())).toBe(false);
  1116. expect(persianDate.isAfter(new Date(2020, 7, 22, 12, 20, 30, 234))).toBe(
  1117. true
  1118. );
  1119. expect(
  1120. persianDate.isAfter({
  1121. year: 1399,
  1122. month: 6,
  1123. date: 24,
  1124. hour: 11,
  1125. minute: 2,
  1126. second: 55,
  1127. millisecond: 112,
  1128. })
  1129. ).toBe(false);
  1130. expect(persianDate.isAfter("1399/5/1")).toBe(true);
  1131. expect(persianDate.isAfter("1399/13/1")).toBe(false);
  1132. expect(persianDate.isAfter()).toBe(false);
  1133. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  1134. expect(persianDate.isAfter(2020, "6", 1, "12", 20, 30, 235)).toBe(false);
  1135. expect(persianDate.isAfter([2020, 5])).toBe(true);
  1136. expect(persianDate.isAfter(new PersianDate())).toBe(false);
  1137. expect(persianDate.isAfter(new Date(2020, 5, 1, 12, 20, 30, 234))).toBe(true);
  1138. expect(
  1139. persianDate.isAfter({
  1140. year: 2020,
  1141. month: 6,
  1142. date: 24,
  1143. hour: 11,
  1144. minute: 2,
  1145. second: 55,
  1146. millisecond: 112,
  1147. })
  1148. ).toBe(false);
  1149. expect(persianDate.isAfter("2020-5-1")).toBe(true);
  1150. expect(persianDate.isAfter("2020-13-1")).toBe(false);
  1151. expect(persianDate.isAfter()).toBe(false);
  1152. });
  1153. ////////////////////--- Version 1.3.0 ---////////////////////
  1154. test("toObject function without parameter", () => {
  1155. let object = persianDate
  1156. .calendar("j")
  1157. .parse("1400/1/1 12:54:21:123")
  1158. .toObject();
  1159. expect(object.year).toBe(persianDate.year());
  1160. expect(object.month).toBe(persianDate.month());
  1161. expect(object.date).toBe(persianDate.date());
  1162. expect(object.hour).toBe(persianDate.hour());
  1163. expect(object.minute).toBe(persianDate.minute());
  1164. expect(object.second).toBe(persianDate.second());
  1165. expect(object.millisecond).toBe(persianDate.millisecond());
  1166. object = persianDate.calendar("g").parse("2020-1-1 12:54:21:123").toObject();
  1167. expect(object.year).toBe(persianDate.year());
  1168. expect(object.month).toBe(persianDate.month());
  1169. expect(object.date).toBe(persianDate.date());
  1170. expect(object.hour).toBe(persianDate.hour());
  1171. expect(object.minute).toBe(persianDate.minute());
  1172. expect(object.second).toBe(persianDate.second());
  1173. expect(object.millisecond).toBe(persianDate.millisecond());
  1174. });
  1175. test("toObject function with string parameter", () => {
  1176. let object = persianDate
  1177. .calendar("j")
  1178. .parse("1400/1/1 12:54:21:123")
  1179. .toObject("jYY-jMM-D");
  1180. expect(object.year).toBe(persianDate.year("jYY"));
  1181. expect(object.month).toBe(persianDate.month("jMM"));
  1182. expect(object.date).toBe(persianDate.date("D"));
  1183. expect(object.hour).toBe(persianDate.hour());
  1184. expect(object.minute).toBe(persianDate.minute());
  1185. expect(object.second).toBe(persianDate.second());
  1186. expect(object.millisecond).toBe(persianDate.millisecond());
  1187. object = persianDate
  1188. .calendar("g")
  1189. .parse("2020-1-1 12:54:21:123")
  1190. .toObject("YY-MM-jD");
  1191. expect(object.year).toBe(persianDate.year("YY"));
  1192. expect(object.month).toBe(persianDate.month("MM"));
  1193. expect(object.date).toBe(persianDate.date("jD"));
  1194. expect(object.hour).toBe(persianDate.hour());
  1195. expect(object.minute).toBe(persianDate.minute());
  1196. expect(object.second).toBe(persianDate.second());
  1197. expect(object.millisecond).toBe(persianDate.millisecond());
  1198. });
  1199. test("toObject function with array parameter", () => {
  1200. let object = persianDate
  1201. .calendar("j")
  1202. .parse("1400/1/1 12:54:21:123")
  1203. .toObject(["jYY", "jMM", "DD", "kk", "m", "ss", "C"]);
  1204. expect(object.year).toBe(persianDate.year("jYY"));
  1205. expect(object.month).toBe(persianDate.month("jMM"));
  1206. expect(object.date).toBe(persianDate.date("DD"));
  1207. expect(object.hour).toBe(persianDate.hour("kk"));
  1208. expect(object.minute).toBe(persianDate.minute("m"));
  1209. expect(object.second).toBe(persianDate.second("ss"));
  1210. expect(object.millisecond).toBe(persianDate.millisecond("C"));
  1211. object = persianDate
  1212. .calendar("g")
  1213. .parse("2020-1-1 12:54:21:123")
  1214. .toObject(["YY", "MM", "jDD", "kk", "m", "ss", "C"]);
  1215. expect(object.year).toBe(persianDate.year("YY"));
  1216. expect(object.month).toBe(persianDate.month("MM"));
  1217. expect(object.date).toBe(persianDate.date("jDD"));
  1218. expect(object.hour).toBe(persianDate.hour("kk"));
  1219. expect(object.minute).toBe(persianDate.minute("m"));
  1220. expect(object.second).toBe(persianDate.second("ss"));
  1221. expect(object.millisecond).toBe(persianDate.millisecond("C"));
  1222. });
  1223. test("toObject function with object parameter", () => {
  1224. let object = persianDate.calendar("j").parse("1400/1/1").toObject({
  1225. year: "jYY",
  1226. M: "jMM",
  1227. date: "DD",
  1228. hour: "kk",
  1229. minutes: "m",
  1230. s: "ss",
  1231. ms: "C",
  1232. });
  1233. expect(object.year).toBe(persianDate.year("jYY"));
  1234. expect(object.month).toBe(persianDate.month("jMM"));
  1235. expect(object.date).toBe(persianDate.date("DD"));
  1236. expect(object.hour).toBe(persianDate.hour("kk"));
  1237. expect(object.minute).toBe(persianDate.minute("m"));
  1238. expect(object.second).toBe(persianDate.second("ss"));
  1239. expect(object.millisecond).toBe(persianDate.millisecond("C"));
  1240. object = persianDate.calendar("g").parse("2020-1-1").toObject({
  1241. year: "YY",
  1242. M: "MM",
  1243. date: "jDD",
  1244. hour: "kk",
  1245. minutes: "m",
  1246. s: "ss",
  1247. ms: "C",
  1248. });
  1249. expect(object.year).toBe(persianDate.year("YY"));
  1250. expect(object.month).toBe(persianDate.month("MM"));
  1251. expect(object.date).toBe(persianDate.date("jDD"));
  1252. expect(object.hour).toBe(persianDate.hour("kk"));
  1253. expect(object.minute).toBe(persianDate.minute("m"));
  1254. expect(object.second).toBe(persianDate.second("ss"));
  1255. expect(object.millisecond).toBe(persianDate.millisecond("C"));
  1256. });
  1257. test("toObject function with numeric parameter", () => {
  1258. let object = persianDate
  1259. .calendar("j")
  1260. .parse("1400/1/1")
  1261. .toObject("jYY", "jMM", "DD", "kk", "m", "ss", "C");
  1262. expect(object.year).toBe(persianDate.year("jYY"));
  1263. expect(object.month).toBe(persianDate.month("jMM"));
  1264. expect(object.date).toBe(persianDate.date("DD"));
  1265. expect(object.hour).toBe(persianDate.hour("kk"));
  1266. expect(object.minute).toBe(persianDate.minute("m"));
  1267. expect(object.second).toBe(persianDate.second("ss"));
  1268. expect(object.millisecond).toBe(persianDate.millisecond("C"));
  1269. object = persianDate
  1270. .calendar("g")
  1271. .parse("2020-1-1")
  1272. .toObject("YY", "MM", "jDD", "kk", "m", "ss", "C");
  1273. expect(object.year).toBe(persianDate.year("YY"));
  1274. expect(object.month).toBe(persianDate.month("MM"));
  1275. expect(object.date).toBe(persianDate.date("jDD"));
  1276. expect(object.hour).toBe(persianDate.hour("kk"));
  1277. expect(object.minute).toBe(persianDate.minute("m"));
  1278. expect(object.second).toBe(persianDate.second("ss"));
  1279. expect(object.millisecond).toBe(persianDate.millisecond("C"));
  1280. });
  1281. test("isDate function", () => {
  1282. // static
  1283. expect(PersianDate.isDate(new Date())).toBe(true);
  1284. expect(PersianDate.isDate(new PersianDate())).toBe(false);
  1285. expect(PersianDate.isDate("2020-1-1")).toBe(false);
  1286. // non static
  1287. persianDate.calendar("j");
  1288. expect(persianDate.isDate(new Date())).toBe(true);
  1289. expect(persianDate.isDate(new PersianDate())).toBe(false);
  1290. expect(persianDate.isDate("2020-1-1")).toBe(false);
  1291. persianDate.calendar("g");
  1292. expect(persianDate.isDate(new Date())).toBe(true);
  1293. expect(persianDate.isDate(new PersianDate())).toBe(false);
  1294. expect(persianDate.isDate("2020-1-1")).toBe(false);
  1295. });
  1296. test("isPersianDate function", () => {
  1297. // static
  1298. expect(PersianDate.isPersianDate(new Date())).toBe(false);
  1299. expect(PersianDate.isPersianDate(new PersianDate())).toBe(true);
  1300. expect(PersianDate.isPersianDate(new PersianDate().calendar("g"))).toBe(true);
  1301. expect(PersianDate.isPersianDate("2020-1-1")).toBe(false);
  1302. // non static
  1303. persianDate.calendar("j");
  1304. expect(persianDate.isPersianDate(new Date())).toBe(false);
  1305. expect(persianDate.isPersianDate(new PersianDate())).toBe(true);
  1306. expect(persianDate.isPersianDate(new PersianDate().calendar("g"))).toBe(true);
  1307. expect(persianDate.isPersianDate("2020-1-1")).toBe(false);
  1308. persianDate.calendar("g");
  1309. expect(persianDate.isPersianDate(new Date())).toBe(false);
  1310. expect(persianDate.isPersianDate(new PersianDate())).toBe(true);
  1311. expect(persianDate.isPersianDate(new PersianDate().calendar("g"))).toBe(true);
  1312. expect(persianDate.isPersianDate("2020-1-1")).toBe(false);
  1313. });
  1314. test("isSameOrBefore function", () => {
  1315. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  1316. expect(persianDate.isSameOrBefore(1399, "6", 1, "12", 20, 30, 235)).toBe(
  1317. true
  1318. );
  1319. expect(persianDate.isSameOrBefore([1399, 7])).toBe(true);
  1320. expect(persianDate.isSameOrBefore(new PersianDate())).toBe(true);
  1321. expect(
  1322. persianDate.isSameOrBefore(new Date(2020, 7, 22, 12, 20, 30, 235))
  1323. ).toBe(true);
  1324. expect(
  1325. persianDate.isSameOrBefore({
  1326. year: 1399,
  1327. month: 6,
  1328. date: 24,
  1329. hour: 11,
  1330. minute: 2,
  1331. second: 55,
  1332. millisecond: 112,
  1333. })
  1334. ).toBe(true);
  1335. expect(persianDate.isSameOrBefore("1399/6/2")).toBe(true);
  1336. expect(persianDate.isSameOrBefore("1399/13/1")).toBe(false);
  1337. expect(persianDate.isSameOrBefore()).toBe(true);
  1338. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  1339. expect(persianDate.isSameOrBefore(2020, "6", 1, "12", 20, 30, 235)).toBe(
  1340. true
  1341. );
  1342. expect(persianDate.isSameOrBefore([2020, 7])).toBe(true);
  1343. expect(persianDate.isSameOrBefore(new PersianDate())).toBe(true);
  1344. expect(
  1345. persianDate.isSameOrBefore(new Date(2020, 5, 1, 12, 20, 30, 235))
  1346. ).toBe(true);
  1347. expect(
  1348. persianDate.isSameOrBefore({
  1349. year: 2020,
  1350. month: 6,
  1351. date: 24,
  1352. hour: 11,
  1353. minute: 2,
  1354. second: 55,
  1355. millisecond: 112,
  1356. })
  1357. ).toBe(true);
  1358. expect(persianDate.isSameOrBefore("2020-6-2")).toBe(true);
  1359. expect(persianDate.isSameOrBefore("2020-13-1")).toBe(false);
  1360. expect(persianDate.isSameOrBefore()).toBe(true);
  1361. });
  1362. test("isSameOrAfter function", () => {
  1363. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  1364. expect(persianDate.isSameOrAfter(1399, "6", 1, "12", 20, 30, 235)).toBe(true);
  1365. expect(persianDate.isSameOrAfter([1399, 5])).toBe(true);
  1366. expect(persianDate.isSameOrAfter(new PersianDate())).toBe(false);
  1367. expect(
  1368. persianDate.isSameOrBefore(new Date(2020, 7, 22, 12, 20, 30, 235))
  1369. ).toBe(true);
  1370. expect(
  1371. persianDate.isSameOrAfter({
  1372. year: 1399,
  1373. month: 6,
  1374. date: 24,
  1375. hour: 11,
  1376. minute: 2,
  1377. second: 55,
  1378. millisecond: 112,
  1379. })
  1380. ).toBe(false);
  1381. expect(persianDate.isSameOrAfter("1399/5/1")).toBe(true);
  1382. expect(persianDate.isSameOrAfter("1399/13/1")).toBe(false);
  1383. expect(persianDate.isSameOrAfter()).toBe(false);
  1384. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  1385. expect(persianDate.isSameOrAfter(2020, "6", 1, "12", 20, 30, 235)).toBe(true);
  1386. expect(persianDate.isSameOrAfter([2020, 5])).toBe(true);
  1387. expect(persianDate.isSameOrAfter(new PersianDate())).toBe(false);
  1388. expect(
  1389. persianDate.isSameOrBefore(new Date(2020, 5, 1, 12, 20, 30, 235))
  1390. ).toBe(true);
  1391. expect(
  1392. persianDate.isSameOrAfter({
  1393. year: 2020,
  1394. month: 6,
  1395. date: 24,
  1396. hour: 11,
  1397. minute: 2,
  1398. second: 55,
  1399. millisecond: 112,
  1400. })
  1401. ).toBe(false);
  1402. expect(persianDate.isSameOrAfter("2020-5-1")).toBe(true);
  1403. expect(persianDate.isSameOrAfter("2020-13-1")).toBe(false);
  1404. expect(persianDate.isSameOrAfter()).toBe(false);
  1405. });
  1406. test("isBetween function", () => {
  1407. persianDate.calendar("j").parse("1399/6/2 12:20:30.235");
  1408. expect(
  1409. persianDate.isBetween(
  1410. [1399, "5", 1, "12", 20, 30, 235],
  1411. "1399/7/1 12:20:30.235"
  1412. )
  1413. ).toBe(true);
  1414. expect(
  1415. persianDate.isBetween(
  1416. {
  1417. year: 1399,
  1418. month: 5,
  1419. date: 31,
  1420. hour: 11,
  1421. minute: 2,
  1422. second: 55,
  1423. millisecond: 112,
  1424. },
  1425. new PersianDate()
  1426. )
  1427. ).toBe(true);
  1428. expect(persianDate.isBetween("1399/5", new Date())).toBe(true);
  1429. expect(persianDate.isBetween()).toBe(false);
  1430. expect(persianDate.isBetween("1399/7/1", "1399/13/1")).toBe(false);
  1431. expect(persianDate.isBetween("1399/7/32", "1399/12/1")).toBe(false);
  1432. expect(persianDate.isBetween("1399/7", "1399/5")).toBe(false);
  1433. expect(persianDate.isBetween("1399", "1400")).toBe(false);
  1434. expect(persianDate.isBetween("1399", "1400", "[)")).toBe(true);
  1435. expect(persianDate.isBetween("1399/5", "1399/6", "[)")).toBe(false);
  1436. expect(persianDate.isBetween("1399/5", "1399/6", "(]")).toBe(true);
  1437. expect(persianDate.isBetween("1398/11", "1399/7", "[]")).toBe(true);
  1438. expect(persianDate.isBetween("1399/5/31", "1399/6/3")).toBe(true);
  1439. expect(persianDate.isBetween("1399/6/2", "1399/6/2")).toBe(false);
  1440. expect(persianDate.isBetween("1399/6/2", "1399/6/2", "[]")).toBe(true);
  1441. persianDate.calendar("g").parse("2020-6-2 12:20:30.235");
  1442. expect(
  1443. persianDate.isBetween(
  1444. [2020, "5", 1, "12", 20, 30, 235],
  1445. "2020-7-1 12:20:30.235"
  1446. )
  1447. ).toBe(true);
  1448. expect(
  1449. persianDate.isBetween(
  1450. {
  1451. year: 2020,
  1452. month: 5,
  1453. date: 31,
  1454. hour: 11,
  1455. minute: 2,
  1456. second: 55,
  1457. millisecond: 112,
  1458. },
  1459. new PersianDate()
  1460. )
  1461. ).toBe(true);
  1462. expect(persianDate.isBetween("2020-5", new Date())).toBe(true);
  1463. expect(persianDate.isBetween()).toBe(false);
  1464. expect(persianDate.isBetween("2020-7-1", "2020-13-1")).toBe(false);
  1465. expect(persianDate.isBetween("2020-7-32", "2020-12-1")).toBe(false);
  1466. expect(persianDate.isBetween("2020-7", "2020-5")).toBe(false);
  1467. expect(persianDate.isBetween("2020", "2021")).toBe(false);
  1468. expect(persianDate.isBetween("2020", "2021", "[)")).toBe(true);
  1469. expect(persianDate.isBetween("2020-5", "2020-6", "[)")).toBe(false);
  1470. expect(persianDate.isBetween("2020-5", "2020-6", "(]")).toBe(true);
  1471. expect(persianDate.isBetween("2019-11", "2020-7", "(]")).toBe(true);
  1472. expect(persianDate.isBetween("2020-5-31", "2020-6-3")).toBe(true);
  1473. expect(persianDate.isBetween("2020-6-2", "2020-6-2")).toBe(false);
  1474. expect(persianDate.isBetween("2020-6-2", "2020-6-2", "[]")).toBe(true);
  1475. });
  1476. ////////////////////--- Version 1.4.0 ---////////////////////
  1477. test("min function", () => {
  1478. let date = new Date();
  1479. persianDate.calendar("j");
  1480. expect(
  1481. persianDate.min([1399, "5", 1, "12", 20, 30, 235], "1399/7/1 12:20:30.235")
  1482. ).toEqual([1399, "5", 1, "12", 20, 30, 235]);
  1483. expect(
  1484. persianDate.min(
  1485. {
  1486. year: 1399,
  1487. month: 5,
  1488. date: 31,
  1489. hour: 11,
  1490. minute: 2,
  1491. second: 55,
  1492. millisecond: 112,
  1493. },
  1494. new PersianDate()
  1495. )
  1496. ).toEqual({
  1497. year: 1399,
  1498. month: 5,
  1499. date: 31,
  1500. hour: 11,
  1501. minute: 2,
  1502. second: 55,
  1503. millisecond: 112,
  1504. });
  1505. expect(persianDate.min("1399/5/1", date)).toBe("1399/5/1");
  1506. expect(persianDate.min()).toBe(false);
  1507. expect(persianDate.min("1399/7/1", "1399/13/1")).toBe(false);
  1508. expect(persianDate.min("1399/7/1", "1399/12/1")).toBe("1399/7/1");
  1509. expect(persianDate.min("1399/10/21", "1399/10/21")).toBe("1399/10/21");
  1510. expect(persianDate.min("1399/7/32", "1399/12/1")).toBe(false);
  1511. expect(persianDate.min("1399/7", "1399/5")).toBe("1399/5");
  1512. expect(persianDate.min("1399", "1400")).toBe("1399");
  1513. persianDate.calendar("g");
  1514. expect(
  1515. persianDate.min([2020, "5", 1, "12", 20, 30, 235], "2020-7-1 12:20:30.235")
  1516. ).toEqual([2020, "5", 1, "12", 20, 30, 235]);
  1517. expect(
  1518. persianDate.min(
  1519. {
  1520. year: 2020,
  1521. month: 5,
  1522. date: 31,
  1523. hour: 11,
  1524. minute: 2,
  1525. second: 55,
  1526. millisecond: 112,
  1527. },
  1528. new PersianDate()
  1529. )
  1530. ).toEqual({
  1531. year: 2020,
  1532. month: 5,
  1533. date: 31,
  1534. hour: 11,
  1535. minute: 2,
  1536. second: 55,
  1537. millisecond: 112,
  1538. });
  1539. expect(persianDate.min("2020-5-1", date)).toBe("2020-5-1");
  1540. expect(persianDate.min()).toBe(false);
  1541. expect(persianDate.min("2020-7-1", "2020-13-1")).toBe(false);
  1542. expect(persianDate.min("2020-7-1", "2020-12-1")).toBe("2020-7-1");
  1543. expect(persianDate.min("2020-10-21", "2020-10-21")).toBe("2020-10-21");
  1544. expect(persianDate.min("2020-7-32", "2020-12-1")).toBe(false);
  1545. expect(persianDate.min("2020-7", "2020-5")).toBe("2020-5");
  1546. expect(persianDate.min("2020", "2021")).toBe("2020");
  1547. });
  1548. test("max function", () => {
  1549. let date = new Date();
  1550. persianDate.calendar("j");
  1551. expect(
  1552. persianDate.max([1399, "5", 1, "12", 20, 30, 235], "1399/7/1 12:20:30.235")
  1553. ).toBe("1399/7/1 12:20:30.235");
  1554. let p = new PersianDate();
  1555. expect(
  1556. persianDate.max(
  1557. {
  1558. year: 1399,
  1559. month: 5,
  1560. date: 31,
  1561. hour: 11,
  1562. minute: 2,
  1563. second: 55,
  1564. millisecond: 112,
  1565. },
  1566. p
  1567. )
  1568. ).toEqual(p);
  1569. expect(persianDate.max("1399/5/1", date)).toBe(date);
  1570. expect(persianDate.max()).toBe(false);
  1571. expect(persianDate.max("1399/7/1", "1399/13/1")).toBe(false);
  1572. expect(persianDate.max("1399/7/1", "1399/12/1")).toBe("1399/12/1");
  1573. expect(persianDate.min("1399/10/21", "1399/10/21")).toBe("1399/10/21");
  1574. expect(persianDate.max("1399/7/32", "1399/12/1")).toBe(false);
  1575. expect(persianDate.max("1399/7", "1399/5")).toBe("1399/7");
  1576. expect(persianDate.max("1399", "1400")).toBe("1400");
  1577. persianDate.calendar("g");
  1578. expect(
  1579. persianDate.max([2020, "5", 1, "12", 20, 30, 235], "2020-7-1 12:20:30.235")
  1580. ).toBe("2020-7-1 12:20:30.235");
  1581. p = new PersianDate();
  1582. expect(
  1583. persianDate.max(
  1584. {
  1585. year: 2020,
  1586. month: 5,
  1587. date: 31,
  1588. hour: 11,
  1589. minute: 2,
  1590. second: 55,
  1591. millisecond: 112,
  1592. },
  1593. p
  1594. )
  1595. ).toEqual(p);
  1596. expect(persianDate.max("2020-5-1", date)).toBe(date);
  1597. expect(persianDate.max()).toBe(false);
  1598. expect(persianDate.max("2020-7-1", "2020-13-1")).toBe(false);
  1599. expect(persianDate.max("2020-7-1", "2020-12-1")).toBe("2020-12-1");
  1600. expect(persianDate.min("2020-10-21", "2020-10-21")).toBe("2020-10-21");
  1601. expect(persianDate.max("2020-7-32", "2020-12-1")).toBe(false);
  1602. expect(persianDate.max("2020-7", "2020-5")).toBe("2020-7");
  1603. expect(persianDate.max("2020", "2021")).toBe("2021");
  1604. });
  1605. test("diff function", () => {
  1606. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  1607. expect(persianDate.diff([1399, "5", 1, "12", 20, 30, 235], "year")).toBe(0);
  1608. expect(persianDate.diff([1399, "5", 1, "12", 20, 30, 235], "month")).toBe(1);
  1609. expect(
  1610. persianDate.diff(new Date(2020, 6, 22, 12, 20, 30, 235), "month")
  1611. ).toBe(1);
  1612. expect(
  1613. persianDate.diff(
  1614. {
  1615. year: 1399,
  1616. month: 5,
  1617. date: 1,
  1618. hour: 12,
  1619. minute: 20,
  1620. second: 30,
  1621. millisecond: 235,
  1622. },
  1623. "date"
  1624. )
  1625. ).toBe(31);
  1626. expect(persianDate.diff("1399/5/1 12:20:30.235", "hour")).toBe(31 * 24);
  1627. expect(persianDate.diff(persianDate.clone().month(5), "minute")).toBe(
  1628. 31 * 24 * 60
  1629. );
  1630. expect(persianDate.diff("1399/5/1 12:20:30.235", "second")).toBe(
  1631. 31 * 24 * 3600
  1632. );
  1633. expect(persianDate.diff("1399/5/1 12:20:30.235", "millisecond")).toBe(
  1634. 31 * 24 * 3600000
  1635. );
  1636. expect(persianDate.diff("1399/5/1 12:20:30.235")).toBe(31 * 24 * 3600000);
  1637. expect(persianDate.diff(null, "date")).toBe(
  1638. persianDate.diff(persianDate.clone().now().toObject(), "date")
  1639. );
  1640. persianDate.parse("1398/1/10");
  1641. expect(persianDate.diff("1398/6/10", "month")).toBe(-5);
  1642. expect(persianDate.diff("1398/2/1", "month", true)).toBe(-2);
  1643. persianDate.parse("1400");
  1644. expect(persianDate.diff("1399/12", "date")).toBe(30);
  1645. expect(persianDate.clone().parse("1400/2").diff("1400/1", "month")).toBe(1);
  1646. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  1647. expect(persianDate.diff([2020, "5", 1, "12", 20, 30, 235], "year")).toBe(0);
  1648. expect(persianDate.diff([2020, "5", 1, "12", 20, 30, 235], "month")).toBe(1);
  1649. expect(persianDate.diff(new Date(2020, 4, 1, 12, 20, 30, 235), "month")).toBe(
  1650. 1
  1651. );
  1652. expect(
  1653. persianDate.diff(
  1654. {
  1655. year: 2020,
  1656. month: 5,
  1657. date: 1,
  1658. hour: 12,
  1659. minute: 20,
  1660. second: 30,
  1661. millisecond: 235,
  1662. },
  1663. "date"
  1664. )
  1665. ).toBe(31);
  1666. expect(persianDate.diff("2020-5-1 12:20:30.235", "hour")).toBe(31 * 24);
  1667. expect(persianDate.diff(persianDate.clone().month(5), "minute")).toBe(
  1668. 31 * 24 * 60
  1669. );
  1670. expect(persianDate.diff("2020-5-1 12:20:30.235", "second")).toBe(
  1671. 31 * 24 * 3600
  1672. );
  1673. expect(persianDate.diff("2020-5-1 12:20:30.235", "millisecond")).toBe(
  1674. 31 * 24 * 3600000
  1675. );
  1676. expect(persianDate.diff("2020-5-1 12:20:30.235")).toBe(31 * 24 * 3600000);
  1677. expect(persianDate.diff(null, "date")).toBe(
  1678. persianDate.diff(persianDate.clone().now(), "date")
  1679. );
  1680. persianDate.parse("2019-1-10");
  1681. expect(persianDate.diff("2019-6-10", "month")).toBe(-5);
  1682. expect(persianDate.diff("2019-2-1", "month", true)).toBe(-2);
  1683. persianDate.parse("2021");
  1684. expect(persianDate.diff("2020-12", "date")).toBe(31);
  1685. expect(persianDate.clone().parse("2021-2").diff("2021-1", "month")).toBe(1);
  1686. });
  1687. ////////////////////--- Version 1.5.0 ---////////////////////
  1688. test("toArray function without parameter", () => {
  1689. let array = persianDate.calendar("j").parse("1400/1/1").toArray();
  1690. expect(array[0]).toBe(persianDate.year());
  1691. expect(array[1]).toBe(persianDate.month());
  1692. expect(array[2]).toBe(persianDate.date());
  1693. expect(array[3]).toBe(persianDate.hour());
  1694. expect(array[4]).toBe(persianDate.minute());
  1695. expect(array[5]).toBe(persianDate.second());
  1696. expect(array[6]).toBe(persianDate.millisecond());
  1697. array = persianDate.calendar("g").parse("2020-1-1").toArray();
  1698. expect(array[0]).toBe(persianDate.year());
  1699. expect(array[1]).toBe(persianDate.month());
  1700. expect(array[2]).toBe(persianDate.date());
  1701. expect(array[3]).toBe(persianDate.hour());
  1702. expect(array[4]).toBe(persianDate.minute());
  1703. expect(array[5]).toBe(persianDate.second());
  1704. expect(array[6]).toBe(persianDate.millisecond());
  1705. });
  1706. test("toArray function with string parameter", () => {
  1707. let array = persianDate.calendar("j").parse("1400/1/1").toArray("jYY-jMM-D");
  1708. expect(array[0]).toBe(persianDate.year("jYY"));
  1709. expect(array[1]).toBe(persianDate.month("jMM"));
  1710. expect(array[2]).toBe(persianDate.date("D"));
  1711. expect(array[3]).toBe(persianDate.hour());
  1712. expect(array[4]).toBe(persianDate.minute());
  1713. expect(array[5]).toBe(persianDate.second());
  1714. expect(array[6]).toBe(persianDate.millisecond());
  1715. array = persianDate.calendar("g").parse("2020-1-1").toArray("YY-MM-jD");
  1716. expect(array[0]).toBe(persianDate.year("YY"));
  1717. expect(array[1]).toBe(persianDate.month("MM"));
  1718. expect(array[2]).toBe(persianDate.date("jD"));
  1719. expect(array[3]).toBe(persianDate.hour());
  1720. expect(array[4]).toBe(persianDate.minute());
  1721. expect(array[5]).toBe(persianDate.second());
  1722. expect(array[6]).toBe(persianDate.millisecond());
  1723. });
  1724. test("toArray function with array parameter", () => {
  1725. let array = persianDate
  1726. .calendar("j")
  1727. .parse("1400/1/1")
  1728. .toArray(["jYY", "jMM", "DD", "kk", "m", "ss", "C"]);
  1729. expect(array[0]).toBe(persianDate.year("jYY"));
  1730. expect(array[1]).toBe(persianDate.month("jMM"));
  1731. expect(array[2]).toBe(persianDate.date("DD"));
  1732. expect(array[3]).toBe(persianDate.hour("kk"));
  1733. expect(array[4]).toBe(persianDate.minute("m"));
  1734. expect(array[5]).toBe(persianDate.second("ss"));
  1735. expect(array[6]).toBe(persianDate.millisecond("C"));
  1736. array = persianDate
  1737. .calendar("g")
  1738. .parse("2020-1-1")
  1739. .toArray(["YY", "MM", "jDD", "kk", "m", "ss", "C"]);
  1740. expect(array[0]).toBe(persianDate.year("YY"));
  1741. expect(array[1]).toBe(persianDate.month("MM"));
  1742. expect(array[2]).toBe(persianDate.date("jDD"));
  1743. expect(array[3]).toBe(persianDate.hour("kk"));
  1744. expect(array[4]).toBe(persianDate.minute("m"));
  1745. expect(array[5]).toBe(persianDate.second("ss"));
  1746. expect(array[6]).toBe(persianDate.millisecond("C"));
  1747. });
  1748. test("toArray function with object parameter", () => {
  1749. let array = persianDate.calendar("j").parse("1400/1/1").toArray({
  1750. year: "jYY",
  1751. M: "jMM",
  1752. date: "DD",
  1753. hour: "kk",
  1754. minutes: "m",
  1755. s: "ss",
  1756. ms: "C",
  1757. });
  1758. expect(array[0]).toBe(persianDate.year("jYY"));
  1759. expect(array[1]).toBe(persianDate.month("jMM"));
  1760. expect(array[2]).toBe(persianDate.date("DD"));
  1761. expect(array[3]).toBe(persianDate.hour("kk"));
  1762. expect(array[4]).toBe(persianDate.minute("m"));
  1763. expect(array[5]).toBe(persianDate.second("ss"));
  1764. expect(array[6]).toBe(persianDate.millisecond("C"));
  1765. array = persianDate.calendar("g").parse("2020-1-1").toArray({
  1766. year: "YY",
  1767. M: "MM",
  1768. date: "jDD",
  1769. hour: "kk",
  1770. minutes: "m",
  1771. s: "ss",
  1772. ms: "C",
  1773. });
  1774. expect(array[0]).toBe(persianDate.year("YY"));
  1775. expect(array[1]).toBe(persianDate.month("MM"));
  1776. expect(array[2]).toBe(persianDate.date("jDD"));
  1777. expect(array[3]).toBe(persianDate.hour("kk"));
  1778. expect(array[4]).toBe(persianDate.minute("m"));
  1779. expect(array[5]).toBe(persianDate.second("ss"));
  1780. expect(array[6]).toBe(persianDate.millisecond("C"));
  1781. });
  1782. test("toArray function with numeric parameter", () => {
  1783. let array = persianDate
  1784. .calendar("j")
  1785. .parse("1400/1/1")
  1786. .toArray("jYY", "jMM", "DD", "kk", "m", "ss", "C");
  1787. expect(array[0]).toBe(persianDate.year("jYY"));
  1788. expect(array[1]).toBe(persianDate.month("jMM"));
  1789. expect(array[2]).toBe(persianDate.date("DD"));
  1790. expect(array[3]).toBe(persianDate.hour("kk"));
  1791. expect(array[4]).toBe(persianDate.minute("m"));
  1792. expect(array[5]).toBe(persianDate.second("ss"));
  1793. expect(array[6]).toBe(persianDate.millisecond("C"));
  1794. array = persianDate
  1795. .calendar("g")
  1796. .parse("2020-1-1")
  1797. .toArray("YY", "MM", "jDD", "kk", "m", "ss", "C");
  1798. expect(array[0]).toBe(persianDate.year("YY"));
  1799. expect(array[1]).toBe(persianDate.month("MM"));
  1800. expect(array[2]).toBe(persianDate.date("jDD"));
  1801. expect(array[3]).toBe(persianDate.hour("kk"));
  1802. expect(array[4]).toBe(persianDate.minute("m"));
  1803. expect(array[5]).toBe(persianDate.second("ss"));
  1804. expect(array[6]).toBe(persianDate.millisecond("C"));
  1805. });
  1806. ////////////////////--- Version 2.0.0 ---////////////////////
  1807. test("diffForHumans function", () => {
  1808. persianDate.calendar("j").parse("1400/1/1");
  1809. expect(persianDate.diffForHumans("1350/1/1")).toBe("50 سال آینده");
  1810. expect(persianDate.diffForHumans("1450/1/1")).toBe("50 سال پیش");
  1811. expect(persianDate.diffForHumans("1399/1/1")).toBe("1 سال آینده");
  1812. expect(persianDate.diffForHumans("1401/1/1")).toBe("1 سال پیش");
  1813. expect(persianDate.diffForHumans("1399/5/1")).toBe("8 ماه آینده");
  1814. expect(persianDate.diffForHumans("1400/5/1")).toBe("4 ماه پیش");
  1815. expect(persianDate.diffForHumans("1399/12/15")).toBe("16 روز آینده");
  1816. expect(persianDate.diffForHumans("1400/1/15")).toBe("14 روز پیش");
  1817. expect(persianDate.diffForHumans("1399/12/30 20:00")).toBe("4 ساعت آینده");
  1818. expect(persianDate.diffForHumans("1400/1/1 4:00")).toBe("4 ساعت پیش");
  1819. expect(persianDate.diffForHumans("1399/12/30 23:20")).toBe("40 دقیقه آینده");
  1820. expect(persianDate.diffForHumans("1400/1/1 00:40")).toBe("40 دقیقه پیش");
  1821. expect(persianDate.diffForHumans("1399/12/30 23:59:10")).toBe(
  1822. "1 دقیقه آینده"
  1823. );
  1824. expect(persianDate.diffForHumans("1400/1/1 00:00:50")).toBe("1 دقیقه پیش");
  1825. expect(persianDate.diffForHumans("1399/12/30 23:59:30")).toBe("لحظات آینده");
  1826. expect(persianDate.diffForHumans("1400/1/1 00:00:30")).toBe("لحظات پیش");
  1827. expect(persianDate.diffForHumans("1400/1/1")).toBe("هم اکنون");
  1828. expect(persianDate.diffForHumans("1350/1/1", false)).toBe("50 سال");
  1829. expect(persianDate.diffForHumans("1450/1/1", false)).toBe("50 سال");
  1830. persianDate.calendar("g").parse("2020/1/1");
  1831. expect(persianDate.diffForHumans("1970/1/1")).toBe("50 سال آینده");
  1832. expect(persianDate.diffForHumans("2070/1/1")).toBe("50 سال پیش");
  1833. expect(persianDate.diffForHumans("2019/1/1")).toBe("1 سال آینده");
  1834. expect(persianDate.diffForHumans("2021/1/1")).toBe("1 سال پیش");
  1835. expect(persianDate.diffForHumans("2019/5/1")).toBe("8 ماه آینده");
  1836. expect(persianDate.diffForHumans("2020/5/1")).toBe("4 ماه پیش");
  1837. expect(persianDate.diffForHumans("2019/12/15")).toBe("17 روز آینده");
  1838. expect(persianDate.diffForHumans("2020/1/15")).toBe("14 روز پیش");
  1839. expect(persianDate.diffForHumans("2019/12/31 20:00")).toBe("4 ساعت آینده");
  1840. expect(persianDate.diffForHumans("2020/1/1 4:00")).toBe("4 ساعت پیش");
  1841. expect(persianDate.diffForHumans("2019/12/31 23:20")).toBe("40 دقیقه آینده");
  1842. expect(persianDate.diffForHumans("2020/1/1 00:40")).toBe("40 دقیقه پیش");
  1843. expect(persianDate.diffForHumans("2019/12/31 23:59:10")).toBe(
  1844. "1 دقیقه آینده"
  1845. );
  1846. expect(persianDate.diffForHumans("2020/1/1 00:00:50")).toBe("1 دقیقه پیش");
  1847. expect(persianDate.diffForHumans("2019/12/31 23:59:30")).toBe("لحظات آینده");
  1848. expect(persianDate.diffForHumans("2020/1/1 00:00:30")).toBe("لحظات پیش");
  1849. expect(persianDate.diffForHumans("2020/1/1")).toBe("هم اکنون");
  1850. expect(persianDate.diffForHumans("1970/1/1", false)).toBe("50 سال");
  1851. expect(persianDate.diffForHumans("2070/1/1", false)).toBe("50 سال");
  1852. });
  1853. test("fromJalali function", () => {
  1854. persianDate.calendar("j").fromJalali("1399", "6", "6", "14", "45");
  1855. expect(persianDate.toString("datetime:ss.c")).toBe("1399/06/06 14:45:00.0");
  1856. persianDate.fromJalali("1400/1");
  1857. expect(persianDate.toString("datetime:ss.c")).toBe("1400/01/01 00:00:00.0");
  1858. persianDate.fromJalali([1400, 1, 5]);
  1859. expect(persianDate.toString("datetime:ss.c")).toBe("1400/01/05 00:00:00.0");
  1860. persianDate.fromJalali({ year: 1399, month: 10, date: 21 });
  1861. expect(persianDate.toString("datetime:ss.c")).toBe("1399/10/21 00:00:00.0");
  1862. let p = new PersianDate();
  1863. persianDate.fromJalali(p.calendar("g"));
  1864. expect(persianDate.toString("datetime:ss.c")).toBe(
  1865. p.calendar("j").toString("datetime:ss.c")
  1866. );
  1867. expect(persianDate.fromJalali().toString("datetime")).toEqual(
  1868. persianDate.clone().now().toString("datetime")
  1869. );
  1870. persianDate.calendar("g").fromJalali("1399", "8", "1", "14", "45");
  1871. expect(persianDate.toString("datetime:ss.c")).toBe("2020-10-22 14:45:00.0");
  1872. persianDate.fromJalali("1400/1");
  1873. expect(persianDate.toString("datetime:ss.c")).toBe("2021-03-21 00:00:00.0");
  1874. persianDate.fromJalali([1400, 1, 5]);
  1875. expect(persianDate.toString("datetime:ss.c")).toBe("2021-03-25 00:00:00.0");
  1876. persianDate.fromJalali({ year: 1399, month: 8, date: 1 });
  1877. expect(persianDate.toString("datetime:ss.c")).toBe("2020-10-22 00:00:00.0");
  1878. persianDate.fromJalali(p);
  1879. expect(persianDate.toString("datetime:ss.c")).toBe(
  1880. p.calendar("g").toString("datetime:ss.c")
  1881. );
  1882. expect(persianDate.fromJalali().toString("datetime")).toEqual(
  1883. p.calendar("g").now().toString("datetime")
  1884. );
  1885. });
  1886. test("fromGregorian function", () => {
  1887. let date = new Date(2020, 6, 27);
  1888. let p = new PersianDate().calendar("g");
  1889. persianDate
  1890. .calendar("j")
  1891. .fromGregorian("2020", "7", "27", "11", "5", "8", "452");
  1892. expect(persianDate.toString("datetime:ss.c")).toBe("1399/05/06 11:05:08.452");
  1893. persianDate.fromGregorian("2020-8-27");
  1894. expect(persianDate.toString("datetime:ss.c")).toBe("1399/06/06 00:00:00.0");
  1895. persianDate.fromGregorian(date);
  1896. expect(persianDate.toString("datetime:ss.c")).toBe("1399/05/06 00:00:00.0");
  1897. persianDate.fromGregorian(["2020", "7", "27", "11", "5", "8", "452"]);
  1898. expect(persianDate.toString("datetime:ss.c")).toBe("1399/05/06 11:05:08.452");
  1899. persianDate.fromGregorian({
  1900. year: "2020",
  1901. M: "7",
  1902. date: "27",
  1903. hour: "11",
  1904. minutes: "5",
  1905. s: "8",
  1906. ms: "452",
  1907. });
  1908. expect(persianDate.toString("datetime:ss.c")).toBe("1399/05/06 11:05:08.452");
  1909. persianDate.fromGregorian(p);
  1910. expect(persianDate.toString("datetime:ss.c")).toBe(
  1911. p.calendar("j").toString("datetime:ss.c")
  1912. );
  1913. expect(persianDate.fromGregorian()).toEqual(persianDate.clone().now());
  1914. persianDate.calendar("g").fromGregorian("2021", "5", 8);
  1915. expect(persianDate.toString("datetime:ss.c")).toBe("2021-05-08 00:00:00.0");
  1916. persianDate.fromGregorian("2020-8-27");
  1917. expect(persianDate.toString("datetime:ss.c")).toBe("2020-08-27 00:00:00.0");
  1918. persianDate.fromGregorian(date);
  1919. expect(persianDate.toString("datetime:ss.c")).toBe("2020-07-27 00:00:00.0");
  1920. persianDate.fromGregorian(["2020", "7", "27", "11", "5", "8", "452"]);
  1921. expect(persianDate.toString("datetime:ss.c")).toBe("2020-07-27 11:05:08.452");
  1922. persianDate.fromGregorian({
  1923. year: "2020",
  1924. M: "7",
  1925. date: "27",
  1926. hour: "11",
  1927. minutes: "5",
  1928. s: "8",
  1929. ms: "452",
  1930. });
  1931. expect(persianDate.toString("datetime:ss.c")).toBe("2020-07-27 11:05:08.452");
  1932. persianDate.fromGregorian(p.calendar("j"));
  1933. expect(persianDate.toString("datetime:ss.c")).toBe(
  1934. p.calendar("g").toString("datetime:ss.c")
  1935. );
  1936. expect(persianDate.fromGregorian()).toEqual(persianDate.clone().now());
  1937. });
  1938. test("calendar function", () => {
  1939. persianDate.calendar("j").parse("1400");
  1940. expect(persianDate.calendar("j").toString()).toBe("1400/01/01");
  1941. expect(persianDate.calendar("g").toString()).toBe("2021-03-21");
  1942. expect(persianDate.calendar()).toBe("gregorian");
  1943. persianDate.calendar("g").parse("2020");
  1944. expect(persianDate.calendar("g").toString()).toBe("2020-01-01");
  1945. expect(persianDate.calendar("j").toString()).toBe("1398/10/11");
  1946. expect(persianDate.calendar()).toBe("jalali");
  1947. });
  1948. test("getWeeksInYear function", () => {
  1949. expect(persianDate.calendar("j").parse("1399").getWeeksInYear()).toBe(52);
  1950. expect(persianDate.getWeeksInYear(1400)).toBe(52);
  1951. expect(persianDate.calendar("g").parse("2020").getWeeksInYear()).toBe(53);
  1952. expect(persianDate.getWeeksInYear(2021)).toBe(52);
  1953. });
  1954. test("toDate function", () => {
  1955. persianDate.calendar("j").parse("1400");
  1956. expect(persianDate.toDate().toString()).toBe(
  1957. new Date(2021, 2, 21).toString()
  1958. );
  1959. persianDate.calendar("g").parse("2020");
  1960. expect(persianDate.toDate().toString()).toBe(
  1961. new Date(2020, 0, 1, 0, 0, 0, 0).toString()
  1962. );
  1963. });
  1964. test("startOf function", () => {
  1965. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  1966. expect(persianDate.startOf("second").toString("datetime:ss.c")).toBe(
  1967. "1399/06/01 12:20:30.0"
  1968. );
  1969. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  1970. expect(persianDate.startOf("minute").toString("datetime:ss.c")).toBe(
  1971. "1399/06/01 12:20:00.0"
  1972. );
  1973. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  1974. expect(persianDate.startOf("hour").toString("datetime:ss.c")).toBe(
  1975. "1399/06/01 12:00:00.0"
  1976. );
  1977. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  1978. expect(persianDate.startOf("date").toString("datetime:ss.c")).toBe(
  1979. "1399/06/01 00:00:00.0"
  1980. );
  1981. persianDate.calendar("j").parse("1399/6/20 12:20:30.235");
  1982. expect(persianDate.startOf("week").toString("datetime:ss.c")).toBe(
  1983. "1399/06/15 00:00:00.0"
  1984. );
  1985. persianDate.calendar("j").parse("1399/6/20 12:20:30.235");
  1986. expect(persianDate.startOf("month").toString("datetime:ss.c")).toBe(
  1987. "1399/06/01 00:00:00.0"
  1988. );
  1989. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  1990. expect(persianDate.startOf("quarter").toString("datetime:ss.c")).toBe(
  1991. "1399/04/01 00:00:00.0"
  1992. );
  1993. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  1994. expect(persianDate.startOf("year").toString("datetime:ss.c")).toBe(
  1995. "1399/01/01 00:00:00.0"
  1996. );
  1997. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  1998. expect(persianDate.startOf("second").toString("datetime:ss.c")).toBe(
  1999. "2020-06-01 12:20:30.0"
  2000. );
  2001. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  2002. expect(persianDate.startOf("minute").toString("datetime:ss.c")).toBe(
  2003. "2020-06-01 12:20:00.0"
  2004. );
  2005. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  2006. expect(persianDate.startOf("hour").toString("datetime:ss.c")).toBe(
  2007. "2020-06-01 12:00:00.0"
  2008. );
  2009. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  2010. expect(persianDate.startOf("date").toString("datetime:ss.c")).toBe(
  2011. "2020-06-01 00:00:00.0"
  2012. );
  2013. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  2014. expect(persianDate.startOf("week").toString("datetime:ss.c")).toBe(
  2015. "2020-05-31 00:00:00.0"
  2016. );
  2017. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  2018. expect(persianDate.startOf("month").toString("datetime:ss.c")).toBe(
  2019. "2020-06-01 00:00:00.0"
  2020. );
  2021. persianDate.calendar("g").parse("2020-6-20 12:20:30.235");
  2022. expect(persianDate.startOf("quarter").toString("datetime:ss.c")).toBe(
  2023. "2020-04-01 00:00:00.0"
  2024. );
  2025. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  2026. expect(persianDate.startOf("year").toString("datetime:ss.c")).toBe(
  2027. "2020-01-01 00:00:00.0"
  2028. );
  2029. });
  2030. test("endOf function", () => {
  2031. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  2032. expect(persianDate.endOf("second").toString("datetime:ss.c")).toBe(
  2033. "1399/06/01 12:20:30.999"
  2034. );
  2035. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  2036. expect(persianDate.endOf("minute").toString("datetime:ss.c")).toBe(
  2037. "1399/06/01 12:20:59.999"
  2038. );
  2039. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  2040. expect(persianDate.endOf("hour").toString("datetime:ss.c")).toBe(
  2041. "1399/06/01 12:59:59.999"
  2042. );
  2043. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  2044. expect(persianDate.endOf("date").toString("datetime:ss.c")).toBe(
  2045. "1399/06/01 23:59:59.999"
  2046. );
  2047. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  2048. expect(persianDate.endOf("week").toString("datetime:ss.c")).toBe(
  2049. "1399/06/07 23:59:59.999"
  2050. );
  2051. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  2052. expect(persianDate.endOf("month").toString("datetime:ss.c")).toBe(
  2053. "1399/06/31 23:59:59.999"
  2054. );
  2055. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  2056. expect(persianDate.endOf("quarter").toString("datetime:ss.c")).toBe(
  2057. "1399/06/31 23:59:59.999"
  2058. );
  2059. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  2060. expect(persianDate.endOf("year").toString("datetime:ss.c")).toBe(
  2061. "1399/12/30 23:59:59.999"
  2062. );
  2063. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  2064. expect(persianDate.endOf("second").toString("datetime:ss.c")).toBe(
  2065. "2020-06-01 12:20:30.999"
  2066. );
  2067. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  2068. expect(persianDate.endOf("minute").toString("datetime:ss.c")).toBe(
  2069. "2020-06-01 12:20:59.999"
  2070. );
  2071. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  2072. expect(persianDate.endOf("hour").toString("datetime:ss.c")).toBe(
  2073. "2020-06-01 12:59:59.999"
  2074. );
  2075. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  2076. expect(persianDate.endOf("date").toString("datetime:ss.c")).toBe(
  2077. "2020-06-01 23:59:59.999"
  2078. );
  2079. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  2080. expect(persianDate.endOf("week").toString("datetime:ss.c")).toBe(
  2081. "2020-06-06 23:59:59.999"
  2082. );
  2083. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  2084. expect(persianDate.endOf("month").toString("datetime:ss.c")).toBe(
  2085. "2020-06-30 23:59:59.999"
  2086. );
  2087. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  2088. expect(persianDate.endOf("quarter").toString("datetime:ss.c")).toBe(
  2089. "2020-06-30 23:59:59.999"
  2090. );
  2091. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  2092. expect(persianDate.endOf("year").toString("datetime:ss.c")).toBe(
  2093. "2020-12-31 23:59:59.999"
  2094. );
  2095. });
  2096. test("valueOf function", () => {
  2097. persianDate.calendar("j").parse("1399-6-11");
  2098. expect(persianDate.valueOf()).toBe(
  2099. new Date(2020, 8, 1, 0, 0, 0, 0).getTime()
  2100. );
  2101. persianDate.calendar("g").parse("2020-6-11");
  2102. expect(persianDate.valueOf()).toBe(
  2103. new Date(2020, 5, 11, 0, 0, 0, 0).getTime()
  2104. );
  2105. });
  2106. ////////////////////--- Version 2.3.0 ---////////////////////
  2107. test("time function", () => {
  2108. persianDate.calendar("j").parse("1399-7-1");
  2109. persianDate.time("12:20:30.235");
  2110. expect(persianDate.toString("time:ss.c")).toBe("12:20:30.235");
  2111. persianDate.time(12, 20, 30, 235);
  2112. expect(persianDate.toString("time:ss.c")).toBe("12:20:30.235");
  2113. persianDate.time([12, 20, 30, 235]);
  2114. expect(persianDate.toString("time:ss.c")).toBe("12:20:30.235");
  2115. persianDate.time({ h: 12, m: 20, s: 30, ms: 235 });
  2116. expect(persianDate.toString("time:ss.c")).toBe("12:20:30.235");
  2117. persianDate.time(persianDate.clone().parse("1398/10/5 23:05:45.568"));
  2118. expect(persianDate.toString("time:ss.c")).toBe("23:05:45.568");
  2119. persianDate.time(new Date(2020, 5, 6, 23, 5, 45, 568));
  2120. expect(persianDate.toString("time:ss.c")).toBe("23:05:45.568");
  2121. persianDate.time("5");
  2122. expect(persianDate.toString("time:ss.c")).toBe("05:00:00.0");
  2123. persianDate.time("0");
  2124. expect(persianDate.toString("time:ss.c")).toBe("00:00:00.0");
  2125. persianDate.calendar("g").parse("2020-7-1");
  2126. persianDate.time("12:20:30.235");
  2127. expect(persianDate.toString("time:ss.c")).toBe("12:20:30.235");
  2128. persianDate.time(12, 20, 30, 235);
  2129. expect(persianDate.toString("time:ss.c")).toBe("12:20:30.235");
  2130. persianDate.time([12, 20, 30, 235]);
  2131. expect(persianDate.toString("time:ss.c")).toBe("12:20:30.235");
  2132. persianDate.time({ h: 12, m: 20, s: 30, ms: 235 });
  2133. expect(persianDate.toString("time:ss.c")).toBe("12:20:30.235");
  2134. persianDate.time(persianDate.clone().parse("2020-5-6 23:05:45.568"));
  2135. expect(persianDate.toString("time:ss.c")).toBe("23:05:45.568");
  2136. persianDate.time(new Date(2020, 5, 6, 23, 5, 45, 568));
  2137. expect(persianDate.toString("time:ss.c")).toBe("23:05:45.568");
  2138. persianDate.time("5");
  2139. expect(persianDate.toString("time:ss.c")).toBe("05:00:00.0");
  2140. persianDate.time("0");
  2141. expect(persianDate.toString("time:ss.c")).toBe("00:00:00.0");
  2142. });
  2143. test("test errors", () => {
  2144. const d1 = new PersianDate();
  2145. const d2 = new PersianDate();
  2146. expect(d1.isValid()).toBe(true);
  2147. expect(d2.parse(1400, 13).isValid()).toBe(false);
  2148. expect(persianDate.isValid()).toBe(true);
  2149. perf.end();
  2150. });
  2151. ////////////////////--- Version 2.6.0 ---////////////////////
  2152. test("isInArray function", () => {
  2153. persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
  2154. expect(
  2155. persianDate.isInArray([
  2156. [1399, "6", 1, "12", 20, 30, 235],
  2157. new PersianDate(),
  2158. ])
  2159. ).toBe(true);
  2160. expect(
  2161. persianDate.isInArray([[1399, 7], new Date(2020, 7, 22, 12, 20, 30, 235)])
  2162. ).toBe(true);
  2163. expect(
  2164. persianDate.isInArray([
  2165. {
  2166. year: 1399,
  2167. month: 6,
  2168. date: 24,
  2169. hour: 11,
  2170. minute: 2,
  2171. second: 55,
  2172. millisecond: 112,
  2173. },
  2174. "1399/13/1",
  2175. ])
  2176. ).toBe(false);
  2177. expect(persianDate.isInArray(["1399/6/1"])).toBe(true);
  2178. expect(persianDate.isInArray([])).toBe(false);
  2179. expect(persianDate.isInArray([[1399, "6", 1, "12", 20, 30, 0]])).toBe(false);
  2180. persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
  2181. expect(
  2182. persianDate.isInArray([
  2183. [2020, "6", 1, "12", 20, 30, 235],
  2184. new PersianDate(),
  2185. ])
  2186. ).toBe(true);
  2187. expect(
  2188. persianDate.isInArray([[2020, 7], new Date(2020, 5, 1, 12, 20, 30, 235)])
  2189. ).toBe(true);
  2190. expect(
  2191. persianDate.isInArray([
  2192. {
  2193. year: 2020,
  2194. month: 6,
  2195. date: 24,
  2196. hour: 11,
  2197. minute: 2,
  2198. second: 55,
  2199. millisecond: 112,
  2200. },
  2201. "2020-13-1",
  2202. ])
  2203. ).toBe(false);
  2204. expect(persianDate.isInArray(["2020-6-1"])).toBe(true);
  2205. expect(persianDate.isInArray([])).toBe(false);
  2206. expect(persianDate.isInArray([[2020, "6", 1, "12", 20, 30, 0]])).toBe(false);
  2207. });