• js 计算两个日期间所有的日期(moment.js实现)


    使用步骤

    1.先引入 moment.js 

    cdn 引入

    1. <script src="https://cdn.bootcss.com/moment.js/2.20.1/locale/zh-cn.js">script>

     或者 直接下载 下来 。如果是 框架里 用 

    npm install moment --save

    Moment.js 中文网

    实现过程 

    代码如下:

    格式可以随意改 。只要符合 moment规定的就行

      不带 星期 几的

    1. function enumerateDaysBetweenDates(startDate, endDate) { // 假定你已经保证了startDate 小于endDate,且二者不相等
    2. let daysList = [];
    3. let SDate=moment(startDate);
    4. let EDate=moment(endDate);
    5. let xt;
    6. daysList.push(SDate.format("MM-DD"));
    7. while( SDate.add(1,"days").isBefore( EDate) ){ // 注意这里add方法处理后SDate对象已经改变。
    8. daysList.push( SDate.format("MM-DD") );
    9. }
    10. daysList.push( EDate.format("MM-DD") );
    11. return daysList;
    12. }
    13. console.log( enumerateDaysBetweenDates('2021-06-09','2021-06-12'))
    14. console.log( enumerateDaysBetweenDates('2021-06-09 23:00','2021-06-12 01:00'))

     带星期几的

     其实就是 格式化问题 加上 dddd就行

    1. function enumerateDaysBetweenDates(startDate, endDate) { // 假定你已经保证了startDate 小于endDate,且二者不相等
    2. let daysList = [];
    3. let SDate=moment(startDate);
    4. let EDate=moment(endDate);
    5. let xt;
    6. daysList.push(SDate.format("MM-DD dddd"));
    7. while( SDate.add(1,"days").isBefore( EDate) ){ // 注意这里add方法处理后SDate对象已经改变。
    8. daysList.push( SDate.format("MM-DD dddd") );
    9. }
    10. daysList.push( EDate.format("MM-DD dddd") );
    11. return daysList;
    12. }
    13. console.log( enumerateDaysBetweenDates('2021-06-09','2021-06-12'))
    14. console.log( enumerateDaysBetweenDates('2021-06-09 23:00','2021-06-12 01:00'))
    15. console.log( enumerateDaysBetweenDates('2021-06-09 13:00','2021-06-12 21:00'))

    如果想要 带年份 加个 YYYY就行  格式可以随意 改 。只要符合 moment规定的就行

    1. function enumerateDaysBetweenDates(startDate, endDate) { // 假定你已经保证了startDate 小于endDate,且二者不相等
    2. let daysList = [];
    3. let SDate = moment(startDate);
    4. let EDate = moment(endDate);
    5. let xt;
    6. daysList.push(SDate.format("YYYY-MM-DD dddd"));
    7. while (SDate.add(1, "days").isBefore(EDate)) { // 注意这里add方法处理后SDate对象已经改变。
    8. daysList.push(SDate.format("YYYY-MM-DD dddd"));
    9. }
    10. daysList.push(EDate.format("YYYY-MM-DD dddd"));
    11. return daysList;
    12. }
    13. console.log(enumerateDaysBetweenDates('2021-06-09', '2022-06-12'))
    14. console.log(enumerateDaysBetweenDates('2021-06-09 23:00', '2021-06-12 01:00'))
    15. console.log(enumerateDaysBetweenDates('2021-06-09 13:00', '2021-06-12 21:00'))

     获取两个 年份 之间的年份

    会发现有警告:

    moment.min.js:1 Deprecation warning: value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.

    意思就是:

    moment.min.js:1弃用警告:提供的值不是可识别的RFC2822或ISO格式。moment构造回溯到js Date(),这在所有浏览器和版本中都不可靠。不鼓励使用非RFC2822/ISO日期格式,并将在即将发布的主要版本中删除。请参阅http://momentjs.com/guides/#/warnings/js-日期/了解更多信息。

    解决方案:

    这个 说明 日期不符合 格式 加个 new Date就行了 

     console.log(enumerateDaysBetweenDates(new Date('2001'),new Date('2005')))
    1. const enumerateDaysBetweenDates = (startDate, endDate) => {
    2. let daysList = [];
    3. const start = moment(startDate);
    4. const end = moment(endDate);
    5. const day = end.diff(start, "year");
    6. daysList.push(start.format("YYYY"));
    7. for (let i = 1; i <= day; i++) {
    8. daysList.push(start.add(1, "year").format("YYYY"));
    9. }
    10. return daysList;
    11. };
    12. console.log(enumerateDaysBetweenDates('2001','2005'))

     其实年份 是最简单的不用 moment.js 也可以 一个 for循环就行 ,不想要 开始和结尾 那就 改变for循环的条件 i<=变成 i<。

    1. function enumerateDaysBetweenDates(startDate, endDate) {
    2. let daysList = [];
    3. for (let i = Number(startDate); i <= Number(endDate); i++) {
    4. daysList.push(String(i));
    5. }
    6. return daysList;
    7. };
    8. console.log(enumerateDaysBetweenDates('2001', '2005'))

    获取两个月 份之间的月

    其实 也是一个 for循环就行,不想要 开始和结尾 那就 改变for循环的条件 i<=变成 i<。

    这个只是 年内 的可以这样做

    1. function enumerateDaysBetweenDates(startDate, endDate) {
    2. let daysList = [];
    3. for (let i = Number(startDate); i <= Number(endDate)&&i<=12; i++) {
    4. daysList.push(String(i));
    5. }
    6. return daysList;
    7. };
    8. console.log(enumerateDaysBetweenDates('6', '12'))

    moment.js的方法 跨年了 最好 带上 年份

    不想要 几号 那就把 DD去掉

    1. unction enumerateDaysBetweenDates(startDate, endDate) { // 假定你已经保证了startDate 小于endDate,且二者不相等
    2. let daysList = [];
    3. let SDate = moment(startDate);
    4. let EDate = moment(endDate);
    5. let xt;
    6. daysList.push(SDate.format("YYYY-MM-DD"));
    7. while (SDate.add(1, "month").isBefore(EDate)) { // 注意这里add方法处理后SDate对象已经改变。
    8. daysList.push(SDate.format("YYYY-MM-DD"));
    9. }
    10. daysList.push(EDate.format("YYYY-MM-DD"));
    11. return daysList;
    12. }
    13. console.log(enumerateDaysBetweenDates('2021-06-09', '2022-06-12'))

    所有代码

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Documenttitle>
    8. head>
    9. <body>
    10. body>
    11. <script src="https://cdn.bootcss.com/moment.js/2.20.1/moment.min.js">script>
    12. <script src="https://cdn.bootcss.com/moment.js/2.20.1/locale/zh-cn.js">script>
    13. <script>
    14. // // 带星期的
    15. // function enumerateDaysBetweenDates(startDate, endDate) { // 假定你已经保证了startDate 小于endDate,且二者不相等
    16. // let daysList = [];
    17. // let SDate = moment(startDate);
    18. // let EDate = moment(endDate);
    19. // let xt;
    20. // daysList.push(SDate.format("YYYY-MM-DD dddd"));
    21. // while (SDate.add(1, "days").isBefore(EDate)) { // 注意这里add方法处理后SDate对象已经改变。
    22. // daysList.push(SDate.format("YYYY-MM-DD dddd"));
    23. // }
    24. // daysList.push(EDate.format("YYYY-MM-DD dddd"));
    25. // return daysList;
    26. // }
    27. // console.log(enumerateDaysBetweenDates('2021-06-09', '2022-06-12'))
    28. // console.log(enumerateDaysBetweenDates('2021-06-09 23:00', '2021-06-12 01:00'))
    29. // console.log(enumerateDaysBetweenDates('2021-06-09 13:00', '2021-06-12 21:00'))
    30. /*
    31. //获取两个年 之间 的年份
    32. function enumerateDaysBetweenDates (startDate, endDate){
    33. let daysList = [];
    34. const start = moment(startDate);
    35. const end = moment(endDate);
    36. const day = end.diff(start, "year");
    37. daysList.push(start.format("YYYY"));
    38. for (let i = 1; i <= day; i++) {
    39. daysList.push(start.add(1, "year").format("YYYY"));
    40. }
    41. return daysList;
    42. };
    43. console.log(enumerateDaysBetweenDates('2001','2005'))
    44. //for循环实现
    45. function enumerateDaysBetweenDates(startDate, endDate) {
    46. let daysList = [];
    47. for (let i = Number(startDate); i <= Number(endDate); i++) {
    48. daysList.push(String(i));
    49. }
    50. return daysList;
    51. };
    52. console.log(enumerateDaysBetweenDates('2001', '2005'))
    53. */
    54. /*
    55. //不带 星期的
    56. function enumerateDaysBetweenDates(startDate, endDate) { // 假定你已经保证了startDate 小于endDate,且二者不相等
    57. let daysList = [];
    58. let SDate=moment(startDate);
    59. let EDate=moment(endDate);
    60. let xt;
    61. daysList.push(SDate.format("MM-DD"));
    62. while( SDate.add(1,"days").isBefore( EDate) ){ // 注意这里add方法处理后SDate对象已经改变。
    63. daysList.push( SDate.format("MM-DD") );
    64. }
    65. daysList.push( EDate.format("MM-DD") );
    66. return daysList;
    67. }
    68. console.log( enumerateDaysBetweenDates('2021-06-09','2021-06-12'))
    69. console.log( enumerateDaysBetweenDates('2021-06-09 23:00','2021-06-12 01:00'))
    70. console.log( enumerateDaysBetweenDates('2021-06-09 13:00','2021-06-12 21:00'))
    71. */
    72. /*
    73. //获取两个月份间的 月份
    74. function enumerateDaysBetweenDates(startDate, endDate) {
    75. let daysList = [];
    76. for (let i = Number(startDate); i <= Number(endDate)&&i<=12; i++) {
    77. daysList.push(String(i));
    78. }
    79. return daysList;
    80. };
    81. console.log(enumerateDaysBetweenDates('6', '12'))
    82. //moment.js实现 跨年 且带 年份 不想要 几号可以去掉 DD
    83. function enumerateDaysBetweenDates(startDate, endDate) { // 假定你已经保证了startDate 小于endDate,且二者不相等
    84. let daysList = [];
    85. let SDate = moment(startDate);
    86. let EDate = moment(endDate);
    87. let xt;
    88. daysList.push(SDate.format("YYYY-MM-DD"));
    89. while (SDate.add(1, "month").isBefore(EDate)) { // 注意这里add方法处理后SDate对象已经改变。
    90. daysList.push(SDate.format("YYYY-MM-DD"));
    91. }
    92. daysList.push(EDate.format("YYYY-MM-DD"));
    93. return daysList;
    94. }
    95. console.log(enumerateDaysBetweenDates('2021-06-09', '2022-06-12'))
    96. */
    97. function enumerateDaysBetweenDates(startDate, endDate) {
    98. let daysList = [];
    99. for (let i = Number(startDate); i <= Number(endDate)&&i<=12; i++) {
    100. daysList.push(String(i));
    101. }
    102. return daysList;
    103. };
    104. console.log(enumerateDaysBetweenDates('6', '12'))
    105. script>
    106. html>

  • 相关阅读:
    【Python大数据笔记_day04_Hadoop】
    RocketMq面试题
    二叉搜索树(BST,Binary Search Tree)
    C#高性能低GC 非托管动态扩容数组
    如何在idea里git提交代码时,能有emoji表情图片?emoji表情大全给大家奉上
    前端AJAX讲解
    Emgu CV4图像处理之方框滤波和均值滤波12(C#)
    freertos 内部机制
    harib09c的编译和调试
    输入输出错误重定向
  • 原文地址:https://blog.csdn.net/weixin_44058725/article/details/126759726