• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    Ext JS框架中日期函数的用法及日期选择控件的实现

    发布者: 竹韵9933 | 发布时间: 2025-8-13 22:14| 查看数: 7| 评论数: 0|帖子模式

    Ext.Date是一个单例,封装了一系列日期操作函数,扩展JavaScript Date的功能,下面列出一些常用的功能。
    基本函数:
        
    • Ext.Date.add(date, interval, value) 给date增加或减少时间,这个函数不改变原有Date对象的值,而是返回一个新的Date对象。  
    • Ext.Date.between(date, start, end) 判断date是否在start和end之间。  
    • Ext.Date.clearTime(date, clone) 把date的时间设置成00小时00分00秒000毫秒。  
    • Ext.Date.clone(date) 克隆date的一个副本。  
    • Ext.Date.format(date, format)把日期格式化,返回格式化后的字符串。  
    • Ext.Date.getDayOfYear(date)获取date是年中的第几天。  
    • Ext.Date.getDaysInMonth(date)获取date是月中的第几天。  
    • Ext.Date.getFirstDateOfMonth(date)获取date所在月份的第一天。  
    • Ext.Date.getFirstDayOfMonth(date)获取date所在月份第一天的星期。  
    • Ext.Date.getLastDateOfMonth(date)获取date所在月份的最后一天。  
    • Ext.Date.getLastDayOfMonth(date)获取date所在月份最后一天的星期。  
    • Ext.Date.getWeekOfYear(date) 获取date所在年中的第几个星期。  
    • Ext.Date.isLeapYear(date)date所在年份是否闰年。  
    • Ext.Date.now() 返回当前时间到1970年1月1日的毫秒数。在chrome、ie9和ie10中已经有Date.now()实现相同的功能。  
    • Ext.Date.parse(input, format, strict)根据输入的字符串创建日期,Date.parse()有类似的功能。
    下面零碎地举几个例子综合来看一下:
    1. // Ext.Date.add(date, interval, value) 给date增加或减少时间,这个函数不改变原有Date对象的值,而是返回一个新的Date对象。
    2. // @param  {Date}  date   原日期对象。
    3. // @param  {String} interval value的单位,可以选Ext.Date.DAY、Ext.Date.HOUR、Ext.Date.MINUTE、Ext.Date.MONTH、
    4. //               Ext.Date.SECOND、Ext.Date.YEAR、Ext.Date.MILLI。
    5. // @param  {number} value   日期对象需要增加的值。
    6. // @return {Date}       返回增加值后的Date对象。
    7. // Example
    8. var date = Ext.Date.add(new Date('10/29/2006'), Ext.Date.DAY, 5); //增加5天
    9. console.log(date); //返回结果 Fri Nov 03 2006 00:00:00 GMT+0800 (中国标准时间)

    10. var date = Ext.Date.add(new Date('10/29/2006'), Ext.Date.DAY, -5); //减少5天,如果值是负数,则减少。
    11. console.log(date); //返回结果 Tue Oct 24 2006 00:00:00 GMT+0800 (中国标准时间)

    12. var date = Ext.Date.add(new Date('10/29/2006'), Ext.Date.YEAR, 2); //增加2年
    13. console.log(date); //返回结果 Wed Oct 29 2008 00:00:00 GMT+0800 (中国标准时间)


    14. // Ext.Date.between(date, start, end) 判断date是否在start和end之间。
    15. // @param  {Date}   date  要判断的日期。
    16. // @param  {Date}   start  
    17. // @param  {Date}   end
    18. // @return {Boolean}     如果date在start和end之间返回true,否则返回false。
    19. // Example
    20. var date = new Date('10/29/2006');
    21. var start = new Date('10/5/2006');
    22. var end = new Date('11/15/2006');
    23. Ext.Date.between(date, start, end); //返回true


    24. // Ext.Date.clearTime(date, clone) 把date的时间设置成00小时00分00秒000毫秒。
    25. // @param  {Date}   date  
    26. // @param  {Bollean} clone 可选参数。如果为true则返回date的一个副本,如果为false则返回date本身,默认为false。
    27. // @return {Date}      返回设置后的日期。
    28. // Example
    29. var date = new Date('10/30/2012 14:30:00');
    30. Ext.Date.clearTime(date); //返回 Tue Oct 30 2012 00:00:00 GMT+0800 (中国标准时间)


    31. // Ext.Date.clone(date) 克隆date的一个副本。
    32. // @param  {Date} date
    33. // @return {Date} 返回克隆后的Date。
    34. // Example
    35. var orig = new Date('10/30/2012');
    36. var copy = Ext.Date.clone(orig); //克隆一个值


    37. // Ext.Date.format(date, format) 把日期格式化,返回格式化后的字符串。
    38. // @param  {Date}  date  日期。
    39. // @param  {String} format 日期格式,Y-年,m-月,d-日,H-24小时,i-分钟,s-秒
    40. // @return {String}     返回格式化后的字符串。
    41. // Example
    42. var date = new Date('10/20/2012 14:30:00');
    43. Ext.Date.format(date, 'Y-m-d H:i:s');    // 2012-10-20 14:30:00
    44. Ext.Date.format(date, 'Y年m月d日 H:i:s');  // 2012年10月20日 14:30:00


    45. // Ext.Date.getDayOfYear(date) 获取date是年中的第几天
    46. // @param  {Date}  date 日期。
    47. // @return {Number}    返回天数,取值范围0~364,如果是闰年则有365。
    48. // Example
    49. var date = new Date('10/20/2012 14:30:00');
    50. Ext.Date.getDayOfYear(date); //返回 293


    51. // Ext.Date.getDaysInMonth(date) 获取date是月中的第几天
    52. // @param  {Date}  date 日期。
    53. // @return {Number}    返回天数。
    54. // Example
    55. var date = new Date('10/20/2012 14:30:00');
    56. Ext.Date.getDayOfYear(date); //返回 31


    57. // Ext.Date.getFirstDateOfMonth(date) 获取date所在月份的第一天
    58. // @param  {Date} date 日期。
    59. // @return {Date}    返回所在月份的第一天。
    60. // Example
    61. var date = new Date('10/20/2012 14:30:00');
    62. Ext.Date.getFirstDateOfMonth(date); //返回 Mon Oct 01 2012 00:00:00 GMT+0800 (中国标准时间)


    63. // Ext.Date.getFirstDayOfMonth(date) 获取date所在月份第一天的星期
    64. // @param  {Date}  date 日期。
    65. // @return {Number}    返回所在月份第一天的星期,取值范围0~6。
    66. // Example
    67. var date = new Date('10/20/2012 14:30:00');
    68. Ext.Date.getFirstDayOfMonth(date); //返回 1,表示星期一


    69. // Ext.Date.getLastDateOfMonth(date) 获取date所在月份的最后一天
    70. // @param  {Date} date 日期。
    71. // @return {Date}    返回所在月份的最后一天。
    72. // Example
    73. var date = new Date('10/20/2012 14:30:00');
    74. Ext.Date.getLastDateOfMonth(date); //返回 Wed Oct 31 2012 00:00:00 GMT+0800 (中国标准时间)


    75. // Ext.Date.getLastDayOfMonth(date) 获取date所在月份最后一天的星期
    76. // @param  {Date}  date 日期。
    77. // @return {Number}    返回所在月份最后一天的星期,取值范围0~6。
    78. // Example
    79. var date = new Date('10/20/2012 14:30:00');
    80. Ext.Date.getLastDayOfMonth(date); //返回 3,表示星期三


    81. // Ext.Date.getWeekOfYear(date) 获取date所在年中的第几个星期
    82. // @param  {Date}  date 日期。
    83. // @return {Number}    返回所在年中的第几个星期,取值范围1~53。
    84. // Example
    85. var date = new Date('10/20/2012 14:30:00');
    86. Ext.Date.getWeekOfYear(date); //返回 42


    87. // Ext.Date.isLeapYear(date) date所在年份是否闰年
    88. // @param  {Date}   date 日期。
    89. // @return {Boolean}    true表示闰年,false表示平年。
    90. // Example
    91. var date = new Date('10/20/2012 14:30:00');
    92. Ext.Date.isLeapYear(date); //返回 true


    93. // Ext.Date.now()   返回当前时间到1970年1月1日的毫秒数。
    94. //          在chrome、ie9和ie10中已经有Date.now()实现相同的功能。
    95. // @return {Number} 返回毫秒数。
    96. // Example
    97. var timestamp = Ext.Date.now(); //1351666679575
    98. var date = new Date(timestamp); //Wed Oct 31 2012 14:57:59 GMT+0800 (中国标准时间)


    99. // Ext.Date.parse(input, format, strict) 根据输入的字符串创建日期,Date.parse()有类似的功能。
    100. // @param {String}  input  日期字符串。
    101. // @param {String}  format 日期格式。
    102. // @param {Boolean} strict 验证input字符串的有效性,默认是false。
    103. // @param {Date}       返回创建的日期。
    104. // Example
    105. var input = '2012年10月31日 14:30:00';
    106. var format = 'Y年m月d日 H:i:s';
    107. var date = Ext.Date.parse(input, format, true); //Wed Oct 31 2012 14:30:00 GMT+0800 (中国标准时间)
    复制代码

    实例:实现带week(星期)的日期选择控件
    1.问题:

    是否使用了Ext JS 就可以完美的解决 星期的问题呢?
    在本系列的第一篇就有说到, Ext 的datepicker 并不能看到星期, 需要自己去扩展。
    但是, 扩展的时候就有一个问题了:
    Javascript 语言的Date对象每周是从星期天开始。
    而Ext JS的getWeekOfYear这个方法却又是遵循 ISO-8601, 每周是从星期一开始的。(其他的方法又有不是遵循此标准的, Ext JS混合了不同的日期时间表示标准)。
    Ext.Date.getWeekOfYear 这个方法的返回值是 1- 53 之间的数。
    这样的话, 就会出现一些问题:
    Ext js 的日期显示控件的显示是从星期天开始: (S M T W T F S (星期天 星期一 星期二  .. 星期六))
    但是, 通过选中的时间获取星期时却又是从星期天开始。导致:
    每个星期天的星期会小1 (比如2013/08/18 , 星期天, 应该是34周,但是通过这个方法却是算成上一周的结尾 , 33 周)
    date = new Date("2013/08/18");
    var week = Ext.Date.getWeekOfYear(date);
    alert("week="+week);
    Ext Js 日期控件默认显示了 42天, 这样的话,在两个年交互的地方就会出现问题
    是当年显示 53 周呢? 还是下一年的第一周。
    2.解决方案:
    结合js 的Date 对象和 Ext js的Ext.Date, 实现获取星期字串。
    每周以星期天为第一天
    每年的周数从(1-52), 如果超过52 周,算到下一年的第一周。 比如2013/12/29 为 2013年的53周, 算到 2014年的第一周
    返回 “W1334” 这样的周的格式
    1. /*
    2. * return as W1334()2013/08/20
    3. * 1. if sunday==> week = week+1
    4. * getWeekOfYear(Ext use ISO-8601,week begin monday)
    5. * js Date(week begin sunday)
    6. * 2. if week > 52==> year = year +1; week = week - 52;
    7. * 3. if month ==11(12 month) and week <2 ==> year = year +1;
    8. */
    9. function getWeekStrOfDate(date)
    10. {
    11.   var weekStr = null;
    12.   if(date!=null)
    13.   {
    14.     weekStr = "W";
    15.     var dateYear = date.getFullYear();
    16.     var dateWeek = Ext.Date.getWeekOfYear(date);
    17.     var firstDayOfMonth = Ext.Date.getFirstDayOfMonth(date);
    18.     var day = date.getDate();
    19.     var month = date.getMonth();
    20.     //weekday 0-6
    21.     var weekday = date.getDay();
    22.     if(weekday===0)
    23.     {
    24.       dateWeek++;
    25.     }

    26.     // week>52 ==> year +1     
    27.     if(month==11)
    28.     {
    29.       if(dateWeek>52)
    30.       {   
    31.         dateYear += 1;
    32.         dateWeek -= 52;
    33.       }else if(dateWeek<2){
    34.         dateYear += 1;
    35.       }
    36.     }   
    37.     var yearStr = dateYear.toString();
    38.     yearStr = yearStr.substring(2,4);
    39.     var dateWeekStr = dateWeek.toString();
    40.     if(dateWeekStr.length<2)
    41.     {
    42.       dateWeekStr = "0" + dateWeekStr;
    43.     }   
    44.     weekStr += yearStr;
    45.     weekStr += dateWeekStr;   
    46.   }
    47.   return weekStr;
    48. }
    复制代码

    来源:互联网
    免责声明:如果侵犯了您的权益,请联系站长(1277306191@qq.com),我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表