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

1270 строки
60 KiB

  1. var chai = require("chai");
  2. var jalaliMoment = require("./jalali-moment.js");
  3. var moment = require("moment");
  4. chai.should();
  5. jalaliMoment.updateLocale("en"
  6. , { week:
  7. { dow: 6
  8. , doy: 12
  9. }
  10. , longDateFormat:
  11. { LT: "h:mm A"
  12. , L: "jYYYY/jMM/jDD"
  13. , LL: "jD jMMMM jYYYY"
  14. , LLL: "jD jMMMM jYYYY LT"
  15. , LLLL: "dddd, jD jMMMM jYYYY LT"
  16. }
  17. }
  18. );
  19. describe("moment", function() {
  20. describe("#parse", function() {
  21. it("should parse gregorian dates", function() {
  22. var m = jalaliMoment("1981/8/17 07:10:20", "YYYY/M/D hh:mm:ss");
  23. m.format("YYYY-MM-DD hh:mm:ss").should.be.equal("1981-08-17 07:10:20");
  24. m.milliseconds().should.be.equal(0);
  25. });
  26. it("parse persian dates", function () {
  27. jalaliMoment.locale("fa");
  28. var m1 = jalaliMoment("1367/11/04", "YYYY/M/D");
  29. m1.format("YYYY/MM/DD").should.be.equal("1367/11/04");
  30. m1 = jalaliMoment("1367/11/4", "YYYY/M/D");
  31. m1.format("YYYY/MM/DD").should.be.equal("1367/11/04");
  32. m1 = jalaliMoment("1367/1/4", "YYYY/M/D");
  33. m1.format("YYYY/MM/DD").should.be.equal("1367/01/04");
  34. var m1 = jalaliMoment("13671124", "YYYYMMDD");
  35. m1.format("YYYY/MM/DD").should.be.equal("1367/11/24");
  36. // var m1 = jalaliMoment("1367/245");
  37. // m1.format("YYYY/MM/DD").should.be.equal("1367/11/04");
  38. jalaliMoment.locale("en");
  39. });
  40. it("should parse correctly when input is only time", function() {
  41. var jm = jalaliMoment("07:10:20", "hh:mm:ss");
  42. var m = moment("07:10:20", "hh:mm:ss");
  43. jm.format("YYYY-MM-DD hh:mm:ss").should.be.equal(m.format("YYYY-MM-DD hh:mm:ss"))
  44. });
  45. it("should parse when only Jalaali year is in the format", function() {
  46. var m = jalaliMoment("08 1360 17", "MM jYYYY DD");
  47. m.format("YYYY-MM-DD").should.be.equal("1981-08-17");
  48. m = jalaliMoment("08 60 17", "MM jYY DD");
  49. m.format("YYYY-MM-DD").should.be.equal("1981-08-17");
  50. });
  51. it("should parse when only Jalaali month is in the format", function() {
  52. var m = jalaliMoment("1981 5 17", "YYYY jM D");
  53. m.format("YYYY-MM-DD").should.be.equal("1981-07-17");
  54. });
  55. it("should parse when only Jalaali month string is in the format", function() {
  56. var m = jalaliMoment("1981 Amo 17", "YYYY jMMM D");
  57. m.format("YYYY-MM-DD").should.be.equal("1981-07-17");
  58. m = jalaliMoment("1981 Mordaad 17", "YYYY jMMMM D");
  59. m.format("YYYY-MM-DD").should.be.equal("1981-07-17");
  60. });
  61. it("should parse when only Jalaali date is in the format", function() {
  62. var m = jalaliMoment("1981 26 8", "YYYY jD M");
  63. m.format("YYYY-MM-DD").should.be.equal("1981-08-15");
  64. });
  65. it("should parse when Jalaali year and month are in the format", function() {
  66. var m = jalaliMoment("17 1360 5", "D jYYYY jM");
  67. m.format("YYYY-MM-DD").should.be.equal("1981-07-17");
  68. m = jalaliMoment("1392 7", "jYYYY jM");
  69. m.format("YYYY-MM-DD").should.be.equal("2013-09-23");
  70. });
  71. it("should parse when Jalaali year and date are in the format", function() {
  72. var m = jalaliMoment("26 1360 8", "jD jYYYY M");
  73. m.format("YYYY-MM-DD").should.be.equal("1981-08-15");
  74. });
  75. it("should parse when Jalaali month and date are in the format", function() {
  76. jalaliMoment.locale('en');
  77. var m = jalaliMoment("26 1981 5", "jD YYYY jM");
  78. m.format("YYYY-MM-DD").should.be.equal("1981-08-17");
  79. });
  80. it("should parse when Jalaali year, month and date are in the format", function() {
  81. var m = jalaliMoment("26 1360 5", "jD jYYYY jM");
  82. m.format("YYYY-MM-DD").should.be.equal("1981-08-17");
  83. });
  84. it("should parse with complex format", function() {
  85. var m = jalaliMoment("17 26 50 1981 50 8 12", "D jD jYYYY YYYY M M jM");
  86. m.format("YYYY-MM-DD").should.be.equal("1981-08-17");
  87. });
  88. it("should parse format result", function() {
  89. var f = "jYYYY/jM/jD hh:mm:ss.SSS a"
  90. , m = jalaliMoment();
  91. jalaliMoment(m.format(f), f).isSame(m).should.be.equal(true);
  92. });
  93. it("should be able to parse in utc", function() {
  94. var m = jalaliMoment.utc("1360/5/26 07:10:20", "jYYYY/jM/jD hh:mm:ss");
  95. m.format("YYYY-MM-DD hh:mm:ss Z").should.be.equal("1981-08-17 07:10:20 +00:00");
  96. });
  97. it("should parse with a format array", function() {
  98. var p1 = "jYY jM jD"
  99. , p2 = "jM jD jYY"
  100. , p3 = "jD jYY jM"
  101. , m;
  102. m = jalaliMoment("60 11 12", ["D YY M", "M D YY", "YY M D"]);
  103. m.format("YY-MM-DD").should.be.equal("60-11-12");
  104. m = jalaliMoment("10 11 12", [p1, p2, p3]);
  105. m.format("jYY-jMM-jDD").should.be.equal("10-11-12");
  106. m = jalaliMoment("10 11 12", [p2, p3, p1]);
  107. m.format("jYY-jMM-jDD").should.be.equal("12-10-11");
  108. m = jalaliMoment("10 11 12", [p3, p1, p2]);
  109. m.format("jYY-jMM-jDD").should.be.equal("11-12-10");
  110. m = jalaliMoment("10 11 12", [p3, p2, p1]);
  111. m.format("jYY-jMM-jDD").should.be.equal("11-12-10");
  112. m = jalaliMoment("60-11-12", [p3, p2, p1]);
  113. m.format("jYY-jMM-jDD").should.be.equal("60-11-12");
  114. m = jalaliMoment("60 11 12", [p3, p2, p1]);
  115. m.format("jYY-jMM-jDD").should.be.equal("60-11-12");
  116. m = jalaliMoment("60 8 31", ["YY M D", "jYY jM jD"]);
  117. m.format("YY-MM-DD").should.be.equal("60-08-31");
  118. m = jalaliMoment("60 8 31", ["jYY jM jD", "YY M D"]);
  119. m.format("YY-MM-DD").should.be.equal("60-08-31");
  120. m = jalaliMoment("60 5 31", ["YY M D", "jYY jM jD"]);
  121. m.format("YY-MM-DD").should.be.equal("60-05-31");
  122. m = jalaliMoment("60 5 31", ["jYY jM jD", "YY M D"]);
  123. m.format("jYY-jMM-jDD").should.be.equal("60-05-31");
  124. });
  125. });
  126. describe("#format", function() {
  127. it("should work normally when there is no Jalaali token", function() {
  128. var m = jalaliMoment("1981-08-17 07:10:20", "YYYY-MM-DD hh:mm:ss");
  129. m.format("YYYY-MM-DD hh:mm:ss").should.be.equal("1981-08-17 07:10:20");
  130. });
  131. it("should format to Jalaali with Jalaali tokens", function() {
  132. var m = jalaliMoment("1981-08-17 07:10:20", "YYYY-MM-DD hh:mm:ss");
  133. m.format("jYYYY-jMM-jDD hh:mm:ss").should.be.equal("1360-05-26 07:10:20");
  134. });
  135. it("should format with escaped and unescaped tokens", function() {
  136. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  137. m.format("[My] birt\\h [is] jYYYY or YYYY").should.be.equal("My birth is 1360 or 1981");
  138. });
  139. it("should format with mixed tokens", function() {
  140. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  141. m.format("jYYYY/jMM/jDD = YYYY-MM-DD").should.be.equal("1360/05/26 = 1981-08-17");
  142. });
  143. it("should format with jMo", function() {
  144. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  145. m.format("jMo").should.be.equal("5th");
  146. });
  147. it("should format with jM", function() {
  148. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  149. m.format("jM").should.be.equal("5");
  150. });
  151. it("should format with jMM", function() {
  152. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  153. m.format("jMM").should.be.equal("05");
  154. });
  155. it("should format with jMMM", function() {
  156. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  157. m.format("jMMM").should.be.equal("Amo");
  158. });
  159. it("should format with jMMMM", function() {
  160. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  161. m.format("jMMMM").should.be.equal("Mordaad");
  162. });
  163. it("should format with jDo", function() {
  164. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  165. m.format("jDo").should.be.equal("26th");
  166. });
  167. it("should format with jD", function() {
  168. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  169. m.format("jD").should.be.equal("26");
  170. });
  171. it("should format with jDD", function() {
  172. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  173. m.format("jDD").should.be.equal("26");
  174. m = jalaliMoment("1981-08-23", "YYYY-MM-DD");
  175. m.format("jDD").should.be.equal("01");
  176. });
  177. it("should format with jDDD", function() {
  178. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  179. m.format("jDDD").should.be.equal("150");
  180. });
  181. it("should format with jDDDo", function() {
  182. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  183. m.format("jDDDo").should.be.equal("150th");
  184. });
  185. it("should format with jDDDD", function() {
  186. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  187. m.format("jDDDD").should.be.equal("150");
  188. m = jalaliMoment("1981-03-21", "YYYY-MM-DD");
  189. m.format("jDDDD").should.be.equal("001");
  190. });
  191. it("should format with jwo", function() {
  192. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  193. m.format("jwo").should.be.equal("22nd");
  194. });
  195. it("should format with jw", function() {
  196. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  197. m.format("jw").should.be.equal("22");
  198. });
  199. it("should format with jww", function() {
  200. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  201. m.format("jww").should.be.equal("22");
  202. m = jalaliMoment("1981-04-23", "YYYY-MM-DD");
  203. m.format("jww").should.be.equal("05");
  204. });
  205. it("should format with jYY", function() {
  206. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  207. m.format("jYY").should.be.equal("60");
  208. });
  209. it("should format with jYYYY", function() {
  210. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  211. m.format("jYYYY").should.be.equal("1360");
  212. });
  213. it("should format with jYYYYY", function() {
  214. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  215. m.format("jYYYYY").should.be.equal("01360");
  216. });
  217. it("should format with jgg", function() {
  218. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  219. m.format("jgg").should.be.equal("60");
  220. });
  221. it("should format with jgggg", function() {
  222. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  223. m.format("jgggg").should.be.equal("1360");
  224. });
  225. it("should format with jggggg", function() {
  226. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  227. m.format("jggggg").should.be.equal("01360");
  228. });
  229. it("should work with long date formats too", function() {
  230. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  231. m.format("LT").should.be.equal("12:00 AM");
  232. m.format("L").should.be.equal("1360/05/26");
  233. m.format("l").should.be.equal("1360/5/26");
  234. m.format("LL").should.be.equal("26 Mordaad 1360");
  235. m.format("ll").should.be.equal("26 Amo 1360");
  236. m.format("LLL").should.be.equal("26 Mordaad 1360 12:00 AM");
  237. m.format("lll").should.be.equal("26 Amo 1360 12:00 AM");
  238. m.format("LLLL").should.be.equal("Monday, 26 Mordaad 1360 12:00 AM");
  239. m.format("llll").should.be.equal("Mon, 26 Amo 1360 12:00 AM");
  240. });
  241. it("should format another", function() {
  242. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  243. // m.format("Z").should.be.equal("+03:30"); its depend on where it executed
  244. // m.format("X").should.be.equal("366841800");
  245. m.format("dddd").should.be.equal("Monday");
  246. m.format("YYYYY").should.be.equal("01981");
  247. m.format("DDDD").should.be.equal("229");
  248. m.format("jDDD").should.be.equal("150");
  249. m.format("jYYYYY").should.be.equal("01360");
  250. });
  251. });
  252. describe("#jYear", function() {
  253. it("should return Jalaali year", function() {
  254. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  255. m.jYear().should.be.equal(1360);
  256. });
  257. it("should set Jalaali year", function() {
  258. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  259. m.jYear(1392);
  260. m.format("jYYYY/jM/jD").should.be.equal("1392/5/26");
  261. m = jalaliMoment("2013-03-20", "YYYY-MM-DD");
  262. m.format("jYY/jM/jD").should.be.equal("91/12/30");
  263. m.jYear(1392);
  264. m.format("jYY/jM/jD").should.be.equal("92/12/29");
  265. });
  266. it("should also has jYears alias", function() {
  267. jalaliMoment.fn.jYear.should.be.equal(jalaliMoment.fn.jYears);
  268. });
  269. });
  270. describe("#jMonth", function() {
  271. it("should return Jalaali month", function() {
  272. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  273. m.jMonth().should.be.equal(4);
  274. });
  275. it("should set Jalaali month", function() {
  276. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  277. m.jMonth(7);
  278. m.format("jYYYY/jM/jD").should.be.equal("1360/8/26");
  279. m = jalaliMoment("2012-08-21", "YYYY-MM-DD");
  280. m.format("jYY/jM/jD").should.be.equal("91/5/31");
  281. m.jMonth(11);
  282. m.format("jYY/jM/jD").should.be.equal("91/12/30");
  283. m = jalaliMoment("2013-08-22");
  284. m.format("jYY/jM/jD").should.be.equal("92/5/31");
  285. m.jMonth(11);
  286. m.format("jYY/jM/jD").should.be.equal("92/12/29");
  287. });
  288. it("should also has jMonths alias", function() {
  289. jalaliMoment.fn.jMonth.should.be.equal(jalaliMoment.fn.jMonths);
  290. });
  291. });
  292. describe("#jDay", function() {
  293. it("should return Jalaali week day name", function() {
  294. var m = jalaliMoment("1989-01-24", "YYYY-MM-DD");
  295. m.jDay().should.be.equal(3);
  296. });
  297. it("should set Jalaali month", function() {
  298. var m = jalaliMoment("1989-01-24", "YYYY-MM-DD");
  299. m.jDay(5);
  300. m.format("jYYYY/jM/jD").should.be.equal("1367/11/6");
  301. });
  302. });
  303. describe("#jDaysInMonth", function() {
  304. it("should return Jalaali days count in month", function() {
  305. const md = jalaliMoment.from('1398/12/01', 'fa', 'YYYY/MM/DD').jDaysInMonth()
  306. md.should.be.equal(29);
  307. });
  308. it("should return ordibehesht days count", function() {
  309. const md = jalaliMoment.from('1398/01/01', 'fa', 'jYYYY/jMM/jDD').jDaysInMonth();
  310. md.should.be.equal(31);
  311. });
  312. it("should return leap year esfand days count", function() {
  313. const md = jalaliMoment.jDaysInMonth(1398, 11); // esfand 98
  314. md.should.be.equal(29);
  315. });
  316. });
  317. describe("#jDate", function() {
  318. it("should return Jalaali date", function() {
  319. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  320. m.jDate().should.be.equal(26);
  321. });
  322. it("should set Jalaali date", function() {
  323. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  324. m.jDate(30);
  325. m.format("jYYYY/jM/jD").should.be.equal("1360/5/30");
  326. m = jalaliMoment("2013-03-01", "YYYY-MM-DD");
  327. m.format("jYY/jM/jD").should.be.equal("91/12/11");
  328. m.jDate(29);
  329. m.format("jYY/jM/jD").should.be.equal("91/12/29");
  330. m.jDate(30);
  331. m.format("jYY/jM/jD").should.be.equal("91/12/30");
  332. m.jDate(30);
  333. m.format("jYY/jM/jD").should.be.equal("91/12/30");
  334. m.jDate(31);
  335. m.format("jYY/jM/jD").should.be.equal("92/1/1");
  336. m.jDate(90);
  337. m.format("jYY/jM/jD").should.be.equal("92/3/28");
  338. });
  339. it("should also has jDates alias", function() {
  340. jalaliMoment.fn.jDate.should.be.equal(jalaliMoment.fn.jDates);
  341. });
  342. });
  343. describe("#jDayOfYear", function() {
  344. it("should return Jalaali date of year", function() {
  345. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  346. m.jDayOfYear().should.be.equal(150);
  347. m = jalaliMoment("1981-03-21", "YYYY-MM-DD");
  348. m.jDayOfYear().should.be.equal(1);
  349. m = jalaliMoment("1982-03-20", "YYYY-MM-DD");
  350. m.jDayOfYear().should.be.equal(365);
  351. m = jalaliMoment("1984-03-20", "YYYY-MM-DD");
  352. m.jDayOfYear().should.be.equal(366);
  353. });
  354. it("should set Jalaali date of year", function() {
  355. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  356. m.jDayOfYear(30);
  357. m.format("jYYYY/jM/jD").should.be.equal("1360/1/30");
  358. m.jDayOfYear(364);
  359. m.format("jYY/jM/jD").should.be.equal("60/12/28");
  360. m.jDayOfYear(365);
  361. m.format("jYY/jM/jD").should.be.equal("60/12/29");
  362. m.jDayOfYear(366);
  363. m.format("jYY/jM/jD").should.be.equal("61/1/1");
  364. m.jDayOfYear(1);
  365. m.format("jYY/jM/jD").should.be.equal("61/1/1");
  366. m.jDayOfYear(90);
  367. m.format("jYY/jM/jD").should.be.equal("61/3/28");
  368. m.jDayOfYear(365 + 366);
  369. m.format("jYY/jM/jD").should.be.equal("62/12/30");
  370. });
  371. });
  372. describe("#jWeek", function() {
  373. it("jweek with both locale", function() {
  374. var m = jalaliMoment("1396/01/05","jYYYY/jMM/jDD");
  375. jalaliMoment.locale("en");
  376. m.locale("en");
  377. m.format("jYY/jM/jD").should.be.equal("96/1/5");
  378. m.jWeek().should.be.equal(2);
  379. m.locale("fa");
  380. m.jWeek().should.be.equal(2);
  381. });
  382. it("should return Jalaali week of year", function() {
  383. var m = jalaliMoment("1396/01/04","jYYYY/jMM/jDD");
  384. m.format("jYY/jM/jD").should.be.equal("96/1/4");
  385. m.jWeek().should.be.equal(1);
  386. m = jalaliMoment("1396/01/05","jYYYY/jMM/jDD");
  387. m.format("jYY/jM/jD").should.be.equal("96/1/5");
  388. m.jWeek().should.be.equal(2);
  389. m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  390. m.jWeek().should.be.equal(22);
  391. m.jDayOfYear(1);
  392. m.format("jYY/jM/jD").should.be.equal("60/1/1");
  393. m.jWeek().should.be.equal(1);
  394. m.jDayOfYear(8);
  395. m.format("jYY/jM/jD").should.be.equal("60/1/8");
  396. m.jWeek().should.be.equal(2);
  397. m.jDayOfYear(14);
  398. m.format("jYY/jM/jD").should.be.equal("60/1/14");
  399. m.jWeek().should.be.equal(2);
  400. m.jDayOfYear(364);
  401. m.format("jYY/jM/jD").should.be.equal("60/12/28");
  402. m.jWeek().should.be.equal(52);
  403. m.jDayOfYear(365);
  404. m.format("jYY/jM/jD").should.be.equal("60/12/29");
  405. m.jWeek().should.be.equal(1);
  406. m.jDayOfYear(366);
  407. m.format("jYY/jM/jD").should.be.equal("61/1/1");
  408. m.jWeek().should.be.equal(1);
  409. m.jDayOfYear(363);
  410. m.format("jYY/jM/jD").should.be.equal("61/12/27");
  411. m.jWeek().should.be.equal(52);
  412. m.jDayOfYear(365);
  413. m.format("jYY/jM/jD").should.be.equal("61/12/29");
  414. m.jWeek().should.be.equal(1);
  415. m.jDayOfYear(366);
  416. m.format("jYY/jM/jD").should.be.equal("62/1/1");
  417. m.jWeek().should.be.equal(1);
  418. m.jDayOfYear(365);
  419. m.format("jYY/jM/jD").should.be.equal("62/12/29");
  420. m.jWeek().should.be.equal(1);
  421. m.jDayOfYear(366);
  422. m.format("jYY/jM/jD").should.be.equal("62/12/30");
  423. m.jWeek().should.be.equal(1);
  424. m.jDayOfYear(367);
  425. m.format("jYY/jM/jD").should.be.equal("63/1/1");
  426. m.jWeek().should.be.equal(1);
  427. m.jDayOfYear(365);
  428. m.format("jYY/jM/jD").should.be.equal("63/12/29");
  429. m.jWeek().should.be.equal(1);
  430. m.jDayOfYear(366);
  431. m.format("jYY/jM/jD").should.be.equal("64/1/1");
  432. m.jWeek().should.be.equal(1);
  433. m.jDayOfYear(365);
  434. m.format("jYY/jM/jD").should.be.equal("64/12/29");
  435. m.jWeek().should.be.equal(1);
  436. m.jDayOfYear(366);
  437. m.format("jYY/jM/jD").should.be.equal("65/1/1");
  438. m.jWeek().should.be.equal(1);
  439. m.jDayOfYear(358);
  440. m.format("jYY/jM/jD").should.be.equal("65/12/22");
  441. m.jWeek().should.be.equal(52);
  442. m.jDayOfYear(359);
  443. m.format("jYY/jM/jD").should.be.equal("65/12/23");
  444. m.jWeek().should.be.equal(53);
  445. m.jDayOfYear(360);
  446. m.format("jYY/jM/jD").should.be.equal("65/12/24");
  447. m.jWeek().should.be.equal(53);
  448. m.jDayOfYear(361);
  449. m.format("jYY/jM/jD").should.be.equal("65/12/25");
  450. m.jWeek().should.be.equal(53);
  451. m.jDayOfYear(362);
  452. m.format("jYY/jM/jD").should.be.equal("65/12/26");
  453. m.jWeek().should.be.equal(53);
  454. m.jDayOfYear(363);
  455. m.format("jYY/jM/jD").should.be.equal("65/12/27");
  456. m.jWeek().should.be.equal(53);
  457. m.jDayOfYear(364);
  458. m.format("jYY/jM/jD").should.be.equal("65/12/28");
  459. m.jWeek().should.be.equal(53);
  460. m.jDayOfYear(365);
  461. m.format("jYY/jM/jD").should.be.equal("65/12/29");
  462. m.jWeek().should.be.equal(53);
  463. });
  464. it("should set Jalaali week of year", function() {
  465. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  466. m.jWeek(1);
  467. m.format("jYY/jM/jD").should.be.equal("60/1/3");
  468. m.jWeek(22);
  469. m.format("jYY/jM/jD").should.be.equal("60/5/26");
  470. m.jWeek(52);
  471. m.format("jYY/jM/jD").should.be.equal("60/12/24");
  472. m.jWeek(53);
  473. m.format("jYY/jM/jD").should.be.equal("61/1/2");
  474. m.jWeek(1);
  475. m.format("jYY/jM/jD").should.be.equal("61/1/2");
  476. m.jWeek(0);
  477. m.format("jYY/jM/jD").should.be.equal("60/12/24");
  478. m.jWeek(-1);
  479. m.format("jYY/jM/jD").should.be.equal("59/12/18");
  480. });
  481. });
  482. describe("#jWeekYear", function() {
  483. it("should return Jalaali week year", function() {
  484. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  485. m.jWeekYear().should.be.equal(1360);
  486. m.jDayOfYear(1);
  487. m.format("jYY/jM/jD").should.be.equal("60/1/1");
  488. m.jWeekYear().should.be.equal(1360);
  489. m.jDayOfYear(364);
  490. m.format("jYY/jM/jD").should.be.equal("60/12/28");
  491. m.jWeekYear().should.be.equal(1360);
  492. m.jDayOfYear(365);
  493. m.format("jYY/jM/jD").should.be.equal("60/12/29");
  494. m.jWeekYear().should.be.equal(1361);
  495. m.jDayOfYear(366);
  496. m.format("jYY/jM/jD").should.be.equal("61/1/1");
  497. m.jWeekYear().should.be.equal(1361);
  498. m.jDayOfYear(363);
  499. m.format("jYY/jM/jD").should.be.equal("61/12/27");
  500. m.jWeekYear().should.be.equal(1361);
  501. m.jDayOfYear(365);
  502. m.format("jYY/jM/jD").should.be.equal("61/12/29");
  503. m.jWeekYear().should.be.equal(1362);
  504. m.jDayOfYear(366);
  505. m.format("jYY/jM/jD").should.be.equal("62/1/1");
  506. m.jWeekYear().should.be.equal(1362);
  507. m.jDayOfYear(365);
  508. m.format("jYY/jM/jD").should.be.equal("62/12/29");
  509. m.jWeekYear().should.be.equal(1363);
  510. m.jDayOfYear(366);
  511. m.format("jYY/jM/jD").should.be.equal("62/12/30");
  512. m.jWeekYear().should.be.equal(1363);
  513. m.jDayOfYear(367);
  514. m.format("jYY/jM/jD").should.be.equal("63/1/1");
  515. m.jWeekYear().should.be.equal(1363);
  516. m.jDayOfYear(365);
  517. m.format("jYY/jM/jD").should.be.equal("63/12/29");
  518. m.jWeekYear().should.be.equal(1364);
  519. m.jDayOfYear(366);
  520. m.format("jYY/jM/jD").should.be.equal("64/1/1");
  521. m.jWeekYear().should.be.equal(1364);
  522. m.jDayOfYear(365);
  523. m.format("jYY/jM/jD").should.be.equal("64/12/29");
  524. m.jWeekYear().should.be.equal(1365);
  525. m.jDayOfYear(366);
  526. m.format("jYY/jM/jD").should.be.equal("65/1/1");
  527. m.jWeekYear().should.be.equal(1365);
  528. m.jDayOfYear(358);
  529. m.format("jYY/jM/jD").should.be.equal("65/12/22");
  530. m.jWeekYear().should.be.equal(1365);
  531. m.jDayOfYear(359);
  532. m.format("jYY/jM/jD").should.be.equal("65/12/23");
  533. m.jWeekYear().should.be.equal(1365);
  534. m.jDayOfYear(365);
  535. m.format("jYY/jM/jD").should.be.equal("65/12/29");
  536. m.jWeekYear().should.be.equal(1365);
  537. m.jDayOfYear(366);
  538. m.format("jYY/jM/jD").should.be.equal("66/1/1");
  539. m.jWeekYear().should.be.equal(1366);
  540. });
  541. it("should set Jalaali week year", function() {
  542. var m = jalaliMoment("1981-08-17", "YYYY-MM-DD");
  543. m.jWeekYear(1361);
  544. m.format("jYY/jM/jD").should.be.equal("61/5/26");
  545. m.jWeekYear(1364);
  546. m.format("jYY/jM/jD").should.be.equal("64/5/26");
  547. m.jDayOfYear(365);
  548. m.format("jYY/jM/jD").should.be.equal("64/12/29");
  549. m.jWeekYear(1364);
  550. m.format("jYY/jM/jD").should.be.equal("63/12/29");
  551. m.jWeekYear(1365);
  552. m.format("jYY/jM/jD").should.be.equal("64/12/29");
  553. });
  554. });
  555. describe("#startOf", function() {
  556. it("should work as expected without jYear and jMonth", function() {
  557. var m = jalaliMoment("1981-08-17 07:10:20", "YYYY-MM-DD HH:mm:ss");
  558. m.startOf("year").format("YYYY-MM-DD HH:mm:ss").should.be.equal("1981-01-01 00:00:00");
  559. m = jalaliMoment("1981-08-17 07:10:20", "YYYY-MM-DD HH:mm:ss");
  560. m.startOf("month").format("YYYY-MM-DD HH:mm:ss").should.be.equal("1981-08-01 00:00:00");
  561. m = jalaliMoment("1981-08-17 07:10:20");
  562. m.startOf("day").format("YYYY-MM-DD HH:mm:ss").should.be.equal("1981-08-17 00:00:00");
  563. m = jalaliMoment("1981-08-17 07:10:20", "YYYY-MM-DD HH:mm:ss");
  564. m.startOf("week").format("YYYY-MM-DD HH:mm:ss").should.be.equal("1981-08-15 00:00:00");
  565. });
  566. it("should return start of Jalaali year, month and date", function() {
  567. var m = jalaliMoment("1981-08-17 07:10:20", "YYYY-MM-DD HH:mm:ss");
  568. m.startOf("jYear").format("jYYYY-jMM-jDD HH:mm:ss").should.be.equal("1360-01-01 00:00:00");
  569. m = jalaliMoment("1981-08-17 07:10:20", "YYYY-MM-DD HH:mm:ss");
  570. m.startOf("jMonth").format("jYYYY-jMM-jDD HH:mm:ss").should.be.equal("1360-05-01 00:00:00");
  571. m = jalaliMoment("1981-08-17 07:10:20", "YYYY-MM-DD HH:mm:ss");
  572. m.startOf("day").format("jYYYY-jMM-jDD HH:mm:ss").should.be.equal("1360-05-26 00:00:00");
  573. m = jalaliMoment("2017-12-14 07:10:20", "YYYY-MM-DD HH:mm:ss");
  574. m.startOf("jweek").format("jYYYY-jMM-jDD HH:mm:ss").should.be.equal("1396-09-18 00:00:00");
  575. m.locale("fa").startOf("week").format("jYYYY-jMM-jDD HH:mm:ss").should.be.equal("1396-09-18 00:00:00");
  576. });
  577. });
  578. describe("#endOf", function() {
  579. it("should work as expected without jYear and jMonth", function() {
  580. var m = jalaliMoment("1981-08-17 07:10:20", "YYYY-MM-DD HH:mm:ss");
  581. m.endOf("year").format("YYYY-MM-DD HH:mm:ss").should.be.equal("1981-12-31 23:59:59");
  582. m = jalaliMoment("1981-08-17 07:10:20", "YYYY-MM-DD HH:mm:ss");
  583. m.endOf("month").format("YYYY-MM-DD HH:mm:ss").should.be.equal("1981-08-31 23:59:59");
  584. m = jalaliMoment("1981-08-17 07:10:20", "YYYY-MM-DD HH:mm:ss");
  585. m.endOf("day").format("YYYY-MM-DD HH:mm:ss").should.be.equal("1981-08-17 23:59:59");
  586. m = jalaliMoment("1981-08-17 07:10:20", "YYYY-MM-DD HH:mm:ss");
  587. m.endOf("week").format("YYYY-MM-DD HH:mm:ss").should.be.equal("1981-08-21 23:59:59");
  588. });
  589. it("should return end of Jalaali year, month and date", function() {
  590. var m = jalaliMoment("1981-08-17 07:10:20", "YYYY-MM-DD HH:mm:ss");
  591. m.endOf("jYear").format("jYYYY-jMM-jDD HH:mm:ss").should.be.equal("1360-12-29 23:59:59");
  592. m = jalaliMoment("1981-08-17 07:10:20", "YYYY-MM-DD HH:mm:ss");
  593. m.endOf("jMonth").format("jYYYY-jMM-jDD HH:mm:ss").should.be.equal("1360-05-31 23:59:59");
  594. m = jalaliMoment("1981-08-17 07:10:20", "YYYY-MM-DD HH:mm:ss");
  595. m.endOf("day").format("jYYYY-jMM-jDD HH:mm:ss").should.be.equal("1360-05-26 23:59:59");
  596. m = jalaliMoment("1981-08-17 07:10:20", "YYYY-MM-DD HH:mm:ss");
  597. m.endOf("week").format("jYYYY-jMM-jDD HH:mm:ss").should.be.equal("1360-05-30 23:59:59");
  598. });
  599. it("endOf week in locale fa #109", function() {
  600. var m = jalaliMoment.from("1367/11/04", "fa", "YYYY/MM/DD");
  601. m = m.locale('fa');
  602. m.endOf("week").format("YYYY-MM-DD").should.be.equal(m.startOf('week').add(7, 'day').subtract(1, 'ms').format("YYYY-MM-DD"));
  603. });
  604. });
  605. describe("#isValid", function() {
  606. it("should return true when a valid date is parsed and false otherwise", function() {
  607. var jf = "jYYYY/jMM/jDD"
  608. , gf = "YYYY-MM-DD";
  609. jalaliMoment("1981-08-17", gf).isValid().should.be.equal(true);
  610. jalaliMoment("1981-08-31", gf).isValid().should.be.equal(true);
  611. jalaliMoment("1981-09-31", gf).isValid().should.be.equal(false);
  612. jalaliMoment("1360 Mordaad 26", "jYYYY jMMMM jD").isValid().should.be.equal(true);
  613. jalaliMoment("1360/05/26", jf).isValid().should.be.equal(true);
  614. jalaliMoment("1360/05/31", jf).isValid().should.be.equal(true);
  615. jalaliMoment("1360/07/30", jf).isValid().should.be.equal(true);
  616. jalaliMoment("1360/07/31", jf).isValid().should.be.equal(false);
  617. jalaliMoment("1360/12/29", jf).isValid().should.be.equal(true);
  618. jalaliMoment("1360/12/30", jf).isValid().should.be.equal(false);
  619. jalaliMoment("1360/12/31", jf).isValid().should.be.equal(false);
  620. jalaliMoment("1360/13/01", jf).isValid().should.be.equal(false);
  621. jalaliMoment("1393/11/00", jf).isValid().should.be.equal(false);
  622. });
  623. });
  624. describe("#isValid-strict", function () {
  625. it("should return false when gregorian date is not strictly valid", function () {
  626. var gf = "YYYY-MM-DD";
  627. jalaliMoment("1981-08-17", gf).isValid().should.be.equal(true);
  628. jalaliMoment("1981-08-31", gf).isValid().should.be.equal(true);
  629. jalaliMoment("1981-08-311", gf).isValid().should.be.equal(true);
  630. jalaliMoment("1981-08-311", gf, true).isValid().should.be.equal(false);
  631. });
  632. it("should return false when jalaali date is not strictly valid", function () {
  633. var jf = "jYYYY/jMM/jDD";
  634. jalaliMoment("1360/05/26", jf).isValid().should.be.equal(true);
  635. jalaliMoment("1360/05/31", jf).isValid().should.be.equal(true);
  636. jalaliMoment("1360/05/311", jf, true).isValid().should.be.equal(false);
  637. });
  638. });
  639. describe("#clone", function() {
  640. it("should return a cloned instance", function() {
  641. var m = jalaliMoment("1360/5/26", "jYYYY/jM/jD")
  642. , c = m.clone();
  643. m.add(1, "jYear");
  644. m.add(4, "day");
  645. m.format("jYY/jM/jD").should.be.equal("61/5/30");
  646. c.format("jYY/jM/jD").should.be.equal("60/5/26");
  647. });
  648. it("clone of an invalid date is invalid", function () {
  649. var m1 = jalaliMoment("hello","jYYYY/jMM/jDD");
  650. m1.isValid().should.be.equal(false);
  651. m1.clone().isValid().should.be.equal(false);
  652. });
  653. });
  654. describe("#add", function () {
  655. it("should add gregorian dates correctly", function () {
  656. var gf = "YYYY-M-D"
  657. , m = jalaliMoment("1981-8-17", "YYYY-M-D");
  658. jalaliMoment(m).add(1, "day").format(gf).should.be.equal("1981-8-18");
  659. jalaliMoment(m).add(10, "days").format(gf).should.be.equal("1981-8-27");
  660. jalaliMoment(m).add(30, "days").format(gf).should.be.equal("1981-9-16");
  661. jalaliMoment(m).add(60, "days").format(gf).should.be.equal("1981-10-16");
  662. jalaliMoment(m).add(1, "month").format(gf).should.be.equal("1981-9-17");
  663. jalaliMoment(m).add(2, "months").format(gf).should.be.equal("1981-10-17");
  664. jalaliMoment(m).add(10, "months").format(gf).should.be.equal("1982-6-17");
  665. jalaliMoment(m).add(20, "months").format(gf).should.be.equal("1983-4-17");
  666. jalaliMoment(m).add(1, "year").format(gf).should.be.equal("1982-8-17");
  667. jalaliMoment(m).add(2, "years").format(gf).should.be.equal("1983-8-17");
  668. jalaliMoment(m).add(10, "years").format(gf).should.be.equal("1991-8-17");
  669. jalaliMoment(m).add(20, "years").format(gf).should.be.equal("2001-8-17");
  670. });
  671. it("should add jalaali dates correctly", function () {
  672. var jf = "jYYYY/jM/jD"
  673. , m = jalaliMoment("1360/5/26", "jYYYY/jM/jD");
  674. jalaliMoment(m).add(1, "day").format(jf).should.be.equal("1360/5/27");
  675. jalaliMoment(m).add(4, "days").format(jf).should.be.equal("1360/5/30");
  676. jalaliMoment(m).add(10, "days").format(jf).should.be.equal("1360/6/5");
  677. jalaliMoment(m).add(30, "days").format(jf).should.be.equal("1360/6/25");
  678. jalaliMoment(m).add(60, "days").format(jf).should.be.equal("1360/7/24");
  679. jalaliMoment(m).add(365, "days").format(jf).should.be.equal("1361/5/26");
  680. jalaliMoment(m).add(1, "jmonth").format(jf).should.be.equal("1360/6/26");
  681. jalaliMoment(m).add(2, "jmonths").format(jf).should.be.equal("1360/7/26");
  682. jalaliMoment(m).add(10, "jmonths").format(jf).should.be.equal("1361/3/26");
  683. jalaliMoment(m).add(20, "jmonths").format(jf).should.be.equal("1362/1/26");
  684. jalaliMoment(m).add(1, "jyear").format(jf).should.be.equal("1361/5/26");
  685. jalaliMoment(m).add(2, "jyears").format(jf).should.be.equal("1362/5/26");
  686. jalaliMoment(m).add(3, "jyears").format(jf).should.be.equal("1363/5/26");
  687. jalaliMoment(m).add(4, "jyears").format(jf).should.be.equal("1364/5/26");
  688. jalaliMoment(m).add(10, "jyears").format(jf).should.be.equal("1370/5/26");
  689. jalaliMoment(m).add(20, "jyears").format(jf).should.be.equal("1380/5/26");
  690. });
  691. it("should retain last day of month when adding months or years", function () {
  692. var jf = "jYYYY/jM/jD"
  693. , m = jalaliMoment("1393/6/31", jf);
  694. jalaliMoment(m).add(1, "jmonth").format(jf).should.be.equal("1393/7/30");
  695. jalaliMoment(m).add(5, "jmonth").format(jf).should.be.equal("1393/11/30");
  696. jalaliMoment(m).add(6, "jmonth").format(jf).should.be.equal("1393/12/29");
  697. m = jalaliMoment("1391/12/30", jf);
  698. jalaliMoment(m).add(1, "jyear").format(jf).should.be.equal("1392/12/29");
  699. jalaliMoment(m).add(2, "jyear").format(jf).should.be.equal("1393/12/29");
  700. jalaliMoment(m).add(3, "jyear").format(jf).should.be.equal("1394/12/29");
  701. jalaliMoment(m).add(4, "jyear").format(jf).should.be.equal("1395/12/30");
  702. });
  703. });
  704. describe("#subtract", function () {
  705. it("should subtract gregorian dates correctly", function () {
  706. var gf = "YYYY-M-D"
  707. , m = jalaliMoment("1981-8-17", "YYYY-M-D");
  708. jalaliMoment(m).subtract(1, "day").format(gf).should.be.equal("1981-8-16");
  709. jalaliMoment(m).subtract(10, "days").format(gf).should.be.equal("1981-8-7");
  710. jalaliMoment(m).subtract(30, "days").format(gf).should.be.equal("1981-7-18");
  711. jalaliMoment(m).subtract(60, "days").format(gf).should.be.equal("1981-6-18");
  712. jalaliMoment(m).subtract(1, "month").format(gf).should.be.equal("1981-7-17");
  713. jalaliMoment(m).subtract(2, "months").format(gf).should.be.equal("1981-6-17");
  714. jalaliMoment(m).subtract(10, "months").format(gf).should.be.equal("1980-10-17");
  715. jalaliMoment(m).subtract(20, "months").format(gf).should.be.equal("1979-12-17");
  716. jalaliMoment(m).subtract(1, "year").format(gf).should.be.equal("1980-8-17");
  717. jalaliMoment(m).subtract(2, "years").format(gf).should.be.equal("1979-8-17");
  718. jalaliMoment(m).subtract(10, "years").format(gf).should.be.equal("1971-8-17");
  719. jalaliMoment(m).subtract(20, "years").format(gf).should.be.equal("1961-8-17");
  720. });
  721. it("should subtract jalaali dates correctly", function () {
  722. var jf = "jYYYY/jM/jD"
  723. , m = jalaliMoment("1360/5/26", "jYYYY/jM/jD");
  724. jalaliMoment(m).subtract(1, "day").format(jf).should.be.equal("1360/5/25");
  725. jalaliMoment(m).subtract(4, "days").format(jf).should.be.equal("1360/5/22");
  726. jalaliMoment(m).subtract(10, "days").format(jf).should.be.equal("1360/5/16");
  727. jalaliMoment(m).subtract(30, "days").format(jf).should.be.equal("1360/4/27");
  728. jalaliMoment(m).subtract(60, "days").format(jf).should.be.equal("1360/3/28");
  729. jalaliMoment(m).subtract(365, "days").format(jf).should.be.equal("1359/5/26");
  730. jalaliMoment(m).subtract(1, "jmonth").format(jf).should.be.equal("1360/4/26");
  731. jalaliMoment(m).subtract(2, "jmonths").format(jf).should.be.equal("1360/3/26");
  732. jalaliMoment(m).subtract(10, "jmonths").format(jf).should.be.equal("1359/7/26");
  733. jalaliMoment(m).subtract(20, "jmonths").format(jf).should.be.equal("1358/9/26");
  734. jalaliMoment(m).subtract(1, "jyear").format(jf).should.be.equal("1359/5/26");
  735. jalaliMoment(m).subtract(2, "jyears").format(jf).should.be.equal("1358/5/26");
  736. jalaliMoment(m).subtract(3, "jyears").format(jf).should.be.equal("1357/5/26");
  737. jalaliMoment(m).subtract(4, "jyears").format(jf).should.be.equal("1356/5/26");
  738. jalaliMoment(m).subtract(10, "jyears").format(jf).should.be.equal("1350/5/26");
  739. jalaliMoment(m).subtract(20, "jyears").format(jf).should.be.equal("1340/5/26");
  740. });
  741. it("should retain last day of month when subtracting months or years", function () {
  742. var jf = "jYYYY/jM/jD"
  743. , m = jalaliMoment("1393/1/31", jf);
  744. jalaliMoment(m).subtract(1, "jmonth").format(jf).should.be.equal("1392/12/29");
  745. jalaliMoment(m).subtract(6, "jmonth").format(jf).should.be.equal("1392/7/30");
  746. jalaliMoment(m).subtract(7, "jmonth").format(jf).should.be.equal("1392/6/31");
  747. m = jalaliMoment("1391/12/30", jf);
  748. jalaliMoment(m).subtract(1, "jyear").format(jf).should.be.equal("1390/12/29");
  749. jalaliMoment(m).subtract(2, "jyear").format(jf).should.be.equal("1389/12/29");
  750. jalaliMoment(m).subtract(3, "jyear").format(jf).should.be.equal("1388/12/29");
  751. jalaliMoment(m).subtract(4, "jyear").format(jf).should.be.equal("1387/12/30");
  752. });
  753. it("should subtract months correctly", function () {
  754. var jf = "jYYYY/jM/jD"
  755. , m = jalaliMoment("1393/1/31", jf);
  756. jalaliMoment(m).subtract(1, "jmonth").format(jf).should.be.equal("1392/12/29");
  757. jalaliMoment(m).subtract(2, "jmonth").format(jf).should.be.equal("1392/11/30");
  758. jalaliMoment(m).subtract(7, "jmonth").format(jf).should.be.equal("1392/6/31");
  759. jalaliMoment(m).subtract(12, "jmonth").format(jf).should.be.equal("1392/1/31");
  760. jalaliMoment(m).subtract(13, "jmonth").format(jf).should.be.equal("1391/12/30");
  761. jalaliMoment(m).subtract(25, "jmonth").format(jf).should.be.equal("1390/12/29");
  762. m = jalaliMoment("1393/1/1", jf);
  763. jalaliMoment(m).subtract(1, "jmonth").format(jf).should.be.equal("1392/12/1");
  764. jalaliMoment(m).subtract(2, "jmonth").format(jf).should.be.equal("1392/11/1");
  765. jalaliMoment(m).subtract(7, "jmonth").format(jf).should.be.equal("1392/6/1");
  766. jalaliMoment(m).subtract(12, "jmonth").format(jf).should.be.equal("1392/1/1");
  767. jalaliMoment(m).subtract(13, "jmonth").format(jf).should.be.equal("1391/12/1");
  768. jalaliMoment(m).subtract(25, "jmonth").format(jf).should.be.equal("1390/12/1");
  769. m = jalaliMoment("1393/1/10", jf);
  770. jalaliMoment(m).subtract(1, "jmonth").format(jf).should.be.equal("1392/12/10");
  771. jalaliMoment(m).subtract(2, "jmonth").format(jf).should.be.equal("1392/11/10");
  772. jalaliMoment(m).subtract(7, "jmonth").format(jf).should.be.equal("1392/6/10");
  773. jalaliMoment(m).subtract(12, "jmonth").format(jf).should.be.equal("1392/1/10");
  774. jalaliMoment(m).subtract(13, "jmonth").format(jf).should.be.equal("1391/12/10");
  775. jalaliMoment(m).subtract(25, "jmonth").format(jf).should.be.equal("1390/12/10");
  776. });
  777. });
  778. describe(".jIsLeapYear", function() {
  779. it("should return true for Jalaali leap years and false otherwise", function() {
  780. jalaliMoment.jIsLeapYear(1391).should.be.equal(true);
  781. jalaliMoment.jIsLeapYear(1392).should.be.equal(false);
  782. jalaliMoment.jIsLeapYear(1393).should.be.equal(false);
  783. jalaliMoment.jIsLeapYear(1394).should.be.equal(false);
  784. jalaliMoment.jIsLeapYear(1395).should.be.equal(true);
  785. jalaliMoment.jIsLeapYear(1396).should.be.equal(false);
  786. jalaliMoment.jIsLeapYear(1397).should.be.equal(false);
  787. jalaliMoment.jIsLeapYear(1398).should.be.equal(false);
  788. jalaliMoment.jIsLeapYear(1399).should.be.equal(true);
  789. jalaliMoment.jIsLeapYear(1400).should.be.equal(false);
  790. jalaliMoment.jIsLeapYear(1401).should.be.equal(false);
  791. jalaliMoment.jIsLeapYear(1402).should.be.equal(false);
  792. jalaliMoment.jIsLeapYear(1403).should.be.equal(true);
  793. jalaliMoment.jIsLeapYear(1404).should.be.equal(false);
  794. });
  795. });
  796. describe(".unix", function () {
  797. it("should create a jalaliMoment with unix epoch", function () {
  798. var unix = jalaliMoment("1360/5/26", "jYYYY/jM/jD").unix();
  799. jalaliMoment.unix(unix).format("jYYYY/jM/jD").should.be.equal("1360/5/26");
  800. });
  801. });
  802. describe("#isSame", function () {
  803. it("should work correctly for same year", function () {
  804. var m1 = jalaliMoment("2016-02-04", "YYYY-MM-DD");
  805. var m2 = jalaliMoment("2016-01-01", "YYYY-MM-DD");
  806. var m3 = jalaliMoment("2015-12-31", "YYYY-MM-DD");
  807. var m4 = jalaliMoment("2017-01-01", "YYYY-MM-DD");
  808. m1.isSame(m2, "year").should.be.equal(true);
  809. m1.isSame(m3, "year").should.be.equal(false);
  810. m1.isSame(m4, "year").should.be.equal(false);
  811. m2.isSame(m3, "year").should.be.equal(false);
  812. m2.isSame(m4, "year").should.be.equal(false);
  813. m3.isSame(m4, "year").should.be.equal(false);
  814. m1.isSame(jalaliMoment("2016-02-04", "YYYY-MM-DD"), "day").should.be.equal(true);
  815. });
  816. it("should work correctly for same month", function () {
  817. var m1 = jalaliMoment("2016-02-04", "YYYY-MM-DD");
  818. var m2 = jalaliMoment("2016-02-01", "YYYY-MM-DD");
  819. var m3 = jalaliMoment("2016-01-01", "YYYY-MM-DD");
  820. var m4 = jalaliMoment("2016-03-01", "YYYY-MM-DD");
  821. m1.isSame(m2, "month").should.be.equal(true);
  822. m1.isSame(m3, "month").should.be.equal(false);
  823. m1.isSame(m4, "month").should.be.equal(false);
  824. m2.isSame(m3, "month").should.be.equal(false);
  825. m2.isSame(m4, "month").should.be.equal(false);
  826. m3.isSame(m4, "month").should.be.equal(false);
  827. m1.isSame(jalaliMoment("2016-02-04", "YYYY-MM-DD"), "day").should.be.equal(true);
  828. });
  829. it("should work correctly for same day", function () {
  830. var m1 = jalaliMoment("2016-02-04 06:00", "YYYY-MM-DD HH:mm");
  831. var m2 = jalaliMoment("2016-02-04 07:00", "YYYY-MM-DD HH:mm");
  832. var m3 = jalaliMoment("2016-02-03 06:00", "YYYY-MM-DD HH:mm");
  833. var m4 = jalaliMoment("2016-02-05 06:00", "YYYY-MM-DD HH:mm");
  834. m1.isSame(m2, "day").should.be.equal(true);
  835. m1.isSame(m3, "day").should.be.equal(false);
  836. m1.isSame(m4, "day").should.be.equal(false);
  837. m2.isSame(m3, "day").should.be.equal(false);
  838. m2.isSame(m4, "day").should.be.equal(false);
  839. m3.isSame(m4, "day").should.be.equal(false);
  840. });
  841. it("should work correctly for same jyear", function () {
  842. var m1 = jalaliMoment("1394/11/15", "jYYYY/jMM/jDD");
  843. var m2 = jalaliMoment("1394/01/01", "jYYYY/jMM/jDD");
  844. var m3 = jalaliMoment("1393/11/15", "jYYYY/jMM/jDD");
  845. var m4 = jalaliMoment("1395/11/15", "jYYYY/jMM/jDD");
  846. m1.isSame(m2, "jyear").should.be.equal(true);
  847. m1.isSame(m3, "jyear").should.be.equal(false);
  848. m1.isSame(m4, "jyear").should.be.equal(false);
  849. m2.isSame(m3, "jyear").should.be.equal(false);
  850. m2.isSame(m4, "jyear").should.be.equal(false);
  851. m3.isSame(m4, "jyear").should.be.equal(false);
  852. });
  853. it("should work correctly for same jmonth", function () {
  854. var m1 = jalaliMoment("1394/11/15", "jYYYY/jMM/jDD");
  855. var m2 = jalaliMoment("1394/11/01", "jYYYY/jMM/jDD");
  856. var m3 = jalaliMoment("1394/10/15", "jYYYY/jMM/jDD");
  857. var m4 = jalaliMoment("1394/12/15", "jYYYY/jMM/jDD");
  858. m1.isSame(m2, "jmonth").should.be.equal(true);
  859. m1.isSame(m3, "jmonth").should.be.equal(false);
  860. m1.isSame(m4, "jmonth").should.be.equal(false);
  861. m2.isSame(m3, "jmonth").should.be.equal(false);
  862. m2.isSame(m4, "jmonth").should.be.equal(false);
  863. m3.isSame(m4, "jmonth").should.be.equal(false);
  864. });
  865. it("it absolutely should work correctly for same jday", function () {
  866. var m1 = jalaliMoment("2016-02-04 06:00", "YYYY-MM-DD HH:mm");
  867. var m2 = jalaliMoment("2016-02-04 07:00", "YYYY-MM-DD HH:mm");
  868. var m3 = jalaliMoment("2016-02-03 06:00", "YYYY-MM-DD HH:mm");
  869. var m4 = jalaliMoment("2016-02-05 06:00", "YYYY-MM-DD HH:mm");
  870. m1.isSame(m2, "jday").should.be.equal(true);
  871. m1.isSame(m3, "jday").should.be.equal(false);
  872. m1.isSame(m4, "jday").should.be.equal(false);
  873. m2.isSame(m3, "jday").should.be.equal(false);
  874. m2.isSame(m4, "jday").should.be.equal(false);
  875. m3.isSame(m4, "jday").should.be.equal(false);
  876. });
  877. });
  878. describe("#parse persian date", function (){
  879. it("fill date with another locale", function () {
  880. jalaliMoment.locale("en");
  881. var m1 = jalaliMoment.from("1367/11/04", "fa", "YYYY/MM/DD");
  882. m1.format("jYYYY/jMM/jDD").should.be.equal("1367/11/04");
  883. m1.format("YYYY/MM/DD").should.be.equal("1989/01/24");
  884. var m2 = jalaliMoment.from("11/1367/04", "fa", "MM/YYYY/DD");
  885. m1.format("YYYY/MM/DD").should.be.equal("1989/01/24");
  886. });
  887. });
  888. describe("#switch calendar systems", function (){
  889. it("gregorian is default system", function () {
  890. var m1 = jalaliMoment("1989/01/24","YYYY/MM/DD");
  891. m1.format("jYYYY/jMM/jDD").should.be.equal("1367/11/04");
  892. m1.format("YYYY/MM/DD").should.be.equal("1989/01/24");
  893. m1.isBetween(m1.clone().subtract(1, "day"), m1.clone().add(1, "day"), "day", "[]").should.be.equal(true);
  894. m1.clone().subtract(2, "d").isBetween(m1.clone().subtract(1, "day"), m1.clone().add(1, "day"), "day", "[]").should.be.equal(false);
  895. jalaliMoment().isBetween(jalaliMoment().subtract(1, "day"), jalaliMoment().add(1, "day"), "day", "[]").should.be.equal(true);
  896. jalaliMoment().subtract(2, "d").isBetween(jalaliMoment().subtract(1, "day"), jalaliMoment().add(1, "day"), "day", "[]").should.be.equal(false);
  897. });
  898. it("change locale globally should change the whole instances system", function () {
  899. jalaliMoment.locale("fa");
  900. var m1 = jalaliMoment("1367/11/04","YYYY/MM/DD");
  901. m1.format("YYYY/MM/DD").should.be.equal("1367/11/04");
  902. m1.locale("en");
  903. m1.format("YYYY/MM/DD").should.be.equal("1989/01/24");
  904. });
  905. it("test changeSystemByItsLocale ", function () {
  906. var m1 = jalaliMoment("1367/11/04","jYYYY/jMM/jDD");
  907. m1.locale("fa");
  908. m1.format("YYYY/MM/DD").should.be.equal("1367/11/04");
  909. m1.locale("en");
  910. m1.format("YYYY/MM/DD").should.be.equal("1989/01/24");
  911. });
  912. });
  913. describe("#clone should not affect on calendar system", function () {
  914. it("instance locale and clone", function () {
  915. jalaliMoment.locale("en");
  916. var m1 = jalaliMoment("1367/11/04","jYYYY/jMM/jDD");
  917. m1.locale("fa");
  918. m1.format("YYYY/MM/DD").should.be.equal("1367/11/04");
  919. var m2 = m1.clone();
  920. m2.subtract(1, "day");
  921. m2.format("YYYY/MM/DD").should.be.equal("1367/11/03");
  922. m2.subtract(1, "day");
  923. m2.clone().format("YYYY/MM/DD").should.be.equal("1367/11/02");
  924. });
  925. it("global locale and clone", function () {
  926. jalaliMoment.locale("fa");
  927. var m1 = jalaliMoment("1367/11/04","YYYY/MM/DD");
  928. m1.format("YYYY/MM/DD").should.be.equal("1367/11/04");
  929. var m2 = m1.clone();
  930. m2.format("YYYY/MM/DD").should.be.equal("1367/11/04");
  931. m2.subtract(1, "day");
  932. m2.clone().format("YYYY/MM/DD").should.be.equal("1367/11/03");
  933. });
  934. });
  935. describe("add or subtract when global locale is not as we expected", function () {
  936. it("instance locale and clone", function () {
  937. jalaliMoment.locale("en");
  938. var m1 = jalaliMoment("1395/12/30","jYYYY/jMM/jDD").locale("fa");
  939. m1.format("YYYY/MM/DD").should.be.equal("1395/12/30");
  940. m1.subtract(1, "month");
  941. m1.format("YYYY/MM/DD").should.be.equal("1395/11/30");
  942. m1.subtract(1, "year");
  943. m1.format("YYYY/MM/DD").should.be.equal("1394/11/30");
  944. });
  945. });
  946. describe("test utc time", function () {
  947. it("utc jalaliMoment", function () {
  948. jalaliMoment.locale("en");
  949. var m1 = jalaliMoment("1395/12/30", "jYYYY/jMM/jDD", "fa", true).locale("fa");
  950. m1.format("YYYY/MM/DD").should.be.equal("1395/12/30");
  951. });
  952. });
  953. describe("test locale data", function () {
  954. it("en locale", function () {
  955. jalaliMoment().localeData().jMonths().should.have.lengthOf(12);
  956. jalaliMoment().localeData().jMonthsShort().should.have.lengthOf(12);
  957. });
  958. it("fa locale", function () {
  959. jalaliMoment().locale("fa").localeData().jMonths().should.have.lengthOf(12);
  960. jalaliMoment().locale("fa").localeData().jMonthsShort().should.have.lengthOf(12);
  961. });
  962. });
  963. describe("getting year and month in both locale", function () {
  964. it("en locale", function () {
  965. jalaliMoment.locale("en");
  966. var now = jalaliMoment();
  967. now.locale("en");
  968. var month = +now.format("M");
  969. var year = +now.format("YYYY");
  970. now.year().should.be.equal(year);
  971. now.month().should.be.equal(month - 1);
  972. });
  973. it("fa locale", function () {
  974. jalaliMoment.locale("en");
  975. var now = jalaliMoment();
  976. now.locale("fa");
  977. var month = +now.format("M");
  978. var year = +now.format("YYYY");
  979. now.year().should.be.equal(year);
  980. now.month().should.be.equal(month - 1);
  981. });
  982. });
  983. describe("getting day of year in both locale", function () {
  984. jalaliMoment.locale("en");
  985. var now = jalaliMoment();
  986. it("day of year with en locale", function () {
  987. now.locale("en");
  988. var dayOfYear = +now.format("DDDD");
  989. now.dayOfYear().should.be.equal(dayOfYear);
  990. });
  991. it("day of year with fa locale", function () {
  992. now.locale("fa");
  993. var dayOfYear = +now.format("DDDD");
  994. now.dayOfYear().should.be.equal(dayOfYear);
  995. });
  996. });
  997. describe("getting week fa locale", function () {
  998. jalaliMoment.locale("en");
  999. var now = jalaliMoment();
  1000. now.locale("fa");
  1001. it("week with fa locale", function () {
  1002. now.week().should.be.equal(now.jWeek());
  1003. });
  1004. it("week year with fa locale", function () {
  1005. now.weekYear().should.be.equal(now.jWeekYear());
  1006. });
  1007. });
  1008. describe("getting week fa locale", function () {
  1009. jalaliMoment.locale("en");
  1010. var now = jalaliMoment();
  1011. now.locale("fa");
  1012. it("week with fa locale", function () {
  1013. now.week().should.be.equal(now.jWeek());
  1014. });
  1015. it("week year with fa locale", function () {
  1016. now.weekYear().should.be.equal(now.jWeekYear());
  1017. });
  1018. });
  1019. describe("getting from now with fa locale", function () {
  1020. it("just now", function () {
  1021. jalaliMoment.locale("fa");
  1022. var now = jalaliMoment();
  1023. now.locale("fa");
  1024. now.fromNow().should.be.equal("چند ثانیه پیش");
  1025. });
  1026. it("10 seconds ago", function () {
  1027. jalaliMoment.locale("fa");
  1028. var now = jalaliMoment();
  1029. now.locale("fa");
  1030. now.subtract(10, "s");
  1031. now.fromNow().should.be.equal("چند ثانیه پیش");
  1032. });
  1033. it("100 seconds ago", function () {
  1034. jalaliMoment.locale("fa");
  1035. var now = jalaliMoment();
  1036. now.locale("fa");
  1037. now.subtract(100, "s");
  1038. now.fromNow().should.be.equal("2 دقیقه پیش");
  1039. });
  1040. it("5 days ago", function () {
  1041. jalaliMoment.locale("fa");
  1042. var now = jalaliMoment();
  1043. now.locale("fa");
  1044. now.subtract(5, "d");
  1045. now.fromNow().should.be.equal("5 روز پیش");
  1046. });
  1047. it("1 month ago", function () {
  1048. jalaliMoment.locale("fa");
  1049. var now = jalaliMoment();
  1050. now.locale("fa");
  1051. now.subtract(1, "months");
  1052. now.fromNow().should.be.equal("1 ماه پیش");
  1053. });
  1054. it("3 years ago", function () {
  1055. jalaliMoment.locale("fa");
  1056. var now = jalaliMoment();
  1057. now.locale("fa");
  1058. now.subtract(3, "year");
  1059. now.fromNow().should.be.equal("3 سال پیش");
  1060. });
  1061. });
  1062. describe("use gregorian calendar parser in 'fa' locale", function () {
  1063. it("use jalali calendar when useGregorianParser is false in fa locale", function () {
  1064. jalaliMoment.locale("fa", { useGregorianParser: false });
  1065. jalaliMoment("1370-10-17").format("YYYY-MM-DD").should.be.equal("1370-10-17");
  1066. });
  1067. it("parse using gregorian calendar in fa locale", function () {
  1068. jalaliMoment.locale("fa", { useGregorianParser: true });
  1069. jalaliMoment("2019-01-17T08:19:19.975Z").format("YYYY-MM-DD").should.be.equal("1397-10-27");
  1070. jalaliMoment("2019-02-23").format("YYYY-MM-DD").should.be.equal("1397-12-04");
  1071. });
  1072. });
  1073. describe("jalaliMoment toISOString", function () {
  1074. jalaliMoment.locale("en");
  1075. it("toISOString(false) with 00:00 time and GMT+ timezone should decrease day", function () {
  1076. // const date = jalaliMoment("2020-11-23 +03:30", 'YYYY-MM-DD ZZ').utcOffset("+03:30");
  1077. const date = jalaliMoment.utc("2020-11-23 +03:30", 'YYYY-MM-DD ZZ').utcOffset("+03:30");
  1078. const isoString = date.toISOString(false);
  1079. const dateWithoutTimezone = jalaliMoment(isoString.split('T')[0]);
  1080. date.date().should.be.equal(dateWithoutTimezone.date() + 1);
  1081. date.format("YYYY-MM-DD").should.not.equal(dateWithoutTimezone.format("YYYY-MM-DD"));
  1082. });
  1083. it("toISOString(true) with 00:00 time and GMT+ timezone should preserve date", function () {
  1084. const date = jalaliMoment("2020-11-23").utcOffset("+03:30");
  1085. const isoString = date.toISOString(true);
  1086. const dateWithoutTimezone = jalaliMoment(isoString.split('T')[0]);
  1087. date.format("YYYY-MM-DD").should.be.equal(dateWithoutTimezone.format("YYYY-MM-DD"));
  1088. });
  1089. });
  1090. describe("compare jalaliMoment and moment", function () {
  1091. it("utc should be the same", function () {
  1092. const a = jalaliMoment.utc("09:30", "HH:mm");
  1093. const b = moment.utc("09:30", "HH:mm");
  1094. a.locale('en').format('YYMMDD-HH:mm').should.be.equal(b.format('YYMMDD-HH:mm'));
  1095. });
  1096. });
  1097. describe("jmoment vs moment", function () {
  1098. it("ISO_8601", function () {
  1099. //https://github.com/fingerpich/jalali-moment/issues/70
  1100. const d1 = moment('2019-10-26', moment.ISO_8601).format();
  1101. const d2 = jalaliMoment('2019-10-26', moment.ISO_8601).format();
  1102. d1.should.be.equal(d2);
  1103. });
  1104. it("diff locale fa", function () {
  1105. //https://github.com/fingerpich/jalali-moment/issues/78
  1106. const testDates = [
  1107. {
  1108. d1: jalaliMoment("2020-03-20").locale("fa"), //1399/1/1
  1109. d2: jalaliMoment("2021-03-21").locale("fa"), //1400/1/1
  1110. diff: "year",
  1111. result: -1,
  1112. },
  1113. {
  1114. d1: jalaliMoment("2021-03-21").locale("fa"),
  1115. d2: jalaliMoment("2020-03-20").locale("fa"),
  1116. diff: "year",
  1117. result: 1,
  1118. },
  1119. {
  1120. d1: jalaliMoment("2020-03-21").locale("fa"), //1399/1/2
  1121. d2: jalaliMoment("2021-03-21").locale("fa"), //1400/1/1
  1122. diff: "year",
  1123. result: 0,
  1124. },
  1125. {
  1126. d1: jalaliMoment("2020-03-20").locale("fa"),
  1127. d2: jalaliMoment("2021-03-21").locale("fa"),
  1128. diff: "month",
  1129. result: -12,
  1130. },
  1131. {
  1132. d1: jalaliMoment("2021-03-21").locale("fa"),
  1133. d2: jalaliMoment("2020-03-20").locale("fa"),
  1134. diff: "month",
  1135. result: 12,
  1136. },
  1137. {
  1138. d1: jalaliMoment("2020-07-21").locale("fa"), //1399/04/31
  1139. d2: jalaliMoment("2020-06-21").locale("fa"), //1399/04/01
  1140. diff: "month",
  1141. result: 0,
  1142. },
  1143. {
  1144. d1: jalaliMoment("2020-07-21").locale("fa"), //1399/04/31
  1145. d2: jalaliMoment("2020-06-20").locale("fa"), //1399/03/31
  1146. diff: "month",
  1147. result: 1,
  1148. },
  1149. {
  1150. d1: jalaliMoment("2021-03-21").locale("fa"),
  1151. d2: jalaliMoment("2020-03-20").locale("fa"),
  1152. diff: "day",
  1153. result: 366, //1399 is leap year
  1154. },
  1155. {
  1156. d1: jalaliMoment("2020-07-21").locale("fa"), //1399/04/31
  1157. d2: jalaliMoment("2020-06-20").locale("fa"), //1399/03/31
  1158. diff: "day",
  1159. result: 31,
  1160. },
  1161. ]
  1162. testDates.forEach((date) => {
  1163. date.d1.diff(date.d2, date.diff).should.be.equal(date.result)
  1164. })
  1165. });
  1166. });
  1167. });
  1168. ``