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

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()有类似的功能。

下面零碎地举几个例子综合来看一下:

// Ext.Date.add(date, interval, value) 给date增加或减少时间,这个函数不改变原有Date对象的值,而是返回一个新的Date对象。
// @param  {Date}  date   原日期对象。
// @param  {String} interval value的单位,可以选Ext.Date.DAY、Ext.Date.HOUR、Ext.Date.MINUTE、Ext.Date.MONTH、
//               Ext.Date.SECOND、Ext.Date.YEAR、Ext.Date.MILLI。
// @param  {number} value   日期对象需要增加的值。
// @return {Date}       返回增加值后的Date对象。
// Example
var date = Ext.Date.add(new Date('10/29/2006'), Ext.Date.DAY, 5); //增加5天
console.log(date); //返回结果 Fri Nov 03 2006 00:00:00 GMT+0800 (中国标准时间) 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// Ext.Date.parse(input, format, strict) 根据输入的字符串创建日期,Date.parse()有类似的功能。
// @param {String}  input  日期字符串。
// @param {String}  format 日期格式。
// @param {Boolean} strict 验证input字符串的有效性,默认是false。
// @param {Date}       返回创建的日期。
// Example
var input = '2012年10月31日 14:30:00';
var format = 'Y年m月d日 H:i:s';
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” 这样的周的格式

/*
 * return as W1334()2013/08/20
 * 1. if sunday==> week = week+1
 * getWeekOfYear(Ext use ISO-8601,week begin monday)
 * js Date(week begin sunday)
 * 2. if week > 52==> year = year +1; week = week - 52;
 * 3. if month ==11(12 month) and week <2 ==> year = year +1;
 */
function getWeekStrOfDate(date)
{
  var weekStr = null;
  if(date!=null)
  {
    weekStr = "W";
    var dateYear = date.getFullYear();
    var dateWeek = Ext.Date.getWeekOfYear(date);
    var firstDayOfMonth = Ext.Date.getFirstDayOfMonth(date);
    var day = date.getDate();
    var month = date.getMonth();
    //weekday 0-6
    var weekday = date.getDay();
    if(weekday===0)
    {
      dateWeek++;
    }

    // week>52 ==> year +1
    if(month==11)
    {
      if(dateWeek>52)
      {
        dateYear += 1;
        dateWeek -= 52;
      }else if(dateWeek<2){
        dateYear += 1;
      }
    }
    var yearStr = dateYear.toString();
    yearStr = yearStr.substring(2,4);
    var dateWeekStr = dateWeek.toString();
    if(dateWeekStr.length<2)
    {
      dateWeekStr = "0" + dateWeekStr;
    }
    weekStr += yearStr;
    weekStr += dateWeekStr;
  }
  return weekStr;
}
(0)

相关推荐

  • Winform之TextBox输入日期格式验证yyyy-mm-dd

    复制代码 代码如下: private void button1_Click(object sender, EventArgs e)        {            string s = textBox1.Text.ToString();            bool b = ValidateDataTime(s);            string rs = "";            if (b)            {                rs = &qu

  • ASP.NET中TextBox使用Ajax控件显示日期不全的问题解决方法

    正常的引用 复制代码 代码如下: <%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="AjaxToolKit" %><asp:TextBox ID="txtRecordTime" runat="server" cssclass="style" width

  • Ext JS 4实现带week(星期)的日期选择控件(实战二)

    前言 JavaScript 中的日期和时间 Ext JS 4实现带week(星期)的日期选择控件(实战一) 如对本篇的一些预备知识需详尽了解,可参考以上两篇. Javascript 有提供Date 对象用于处理时间.但是Date 并没有提供获取星期的方法. 要在web 端通过js 方式获取某个时间是这一年的第几个星期,可以根据一些算法去实现. 当然, jquery 的扩展组件 等有直接提供这样的一些现成包. 像Ext js 就有提供获取星期的方法 Ext.Date.getWeekOfYear(d

  • Extjs4如何处理后台json数据中日期和时间

    当ASP.NET后台使用JavaScriptSerializer这个组件将对象序列化为json,或者使用ScriptMethod特性的json [ScriptMethod(ResponseFormat = ResponseFormat.Json), WebMethod(EnableSession = true)] public List<EUser> Users()//参数测试用 { List<EUser> l = new List<EUser>(); Random a

  • Extjs中DisplayField的日期或者数字格式化扩展

    使用 Ext.form.FormPanel 来处理数据时候,某些字段是需要只读的.当然我们可以使用 Ext.form.TextField,然后设置成 ReadOnly,不过这样子的显示效果不是很好,因为始终会有个输入框.所以我们必须使用 Ext.form.DisplayField,但是 Ext.form.DisplayField 没有一个format的属性,也不具备 renderer 这个事件,比如日期字段 var form = new Ext.form.FormPanel({frame: tr

  • Ext JS 4实现带week(星期)的日期选择控件(实战一)

    前言 Ext JS 3 和 Ext JS 4中都有提供日期选择的组件(当然早期版本也有). 但是有一些日期选择的需求是要看到星期,就是日期中的哪一天是这一年的第几周. 遗憾的是Ext js 并没有提供这样的配置. (针对Ext js 4来说,理想的相法是在Ext.picker.Date有一个 类似showWeek这样的配置项) 现有的解法 到网络上去看看基于Ext js 的解法:有找到两个 http://enikao.net/extjs/weeknumber/weeknumber.html 和

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

    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的时间设置成

  • JavaScript的Ext JS框架中的GridPanel组件使用指南

    1 最简单的Grid Panel Grid Panel是ExtJS的核心部分之一,通过Grid Panel可以对数据显示.排序.分组和编辑.Model和Store是Grid Panel处理数据的核心,每个Grid Panel都必须设置Model和Store.要创建Grid Panel,首先要定义Model,Model包括了Grid Panel所有需要显示的字段,相当于数据库中表字段的集合.Store可以看作是一行数据的集合或者是Model的实例集合,每个Store都包含一个或多个Model实例,

  • 浅析JS中回调函数及用法

    回调函数,什么是回调函数呢?很多初学者都不是很明白,感觉懵懵的,不理解,更不会用! 其实简单理解的话就是在一个函数执行完毕后,得到想要的特定数据后在去执行的函数,并没有性药中的那么高深! function getdata(callback){ //这里我们假设是从后端获取数据 setTimeout(function(){ //假设我们获取到数据info var info = { "id":1, "name":'张三' } //得到数据以后执行函数方法 callbac

  • JS中sort函数排序用法实例分析

    本文实例讲述了JS中sort函数排序用法.分享给大家供大家参考,具体如下: 最近遇到了一个面试题目,关于排序的问题,为了完善自己的知识点,这里就写一下学习笔记 <html> <head> <TITLE>class_obj_js_class</TITLE> <script language=javaScript> //sort()方法默认是按照ASCII码大小排序,看下面两个例子 function sortDemo(){ var a, l; //

  • jQuery中extend函数简单用法示例

    本文实例讲述了jQuery中extend函数简单用法.分享给大家供大家参考,具体如下: var result=$.extend({},item,item1); extend给对象添加新的属性:js插件经常使用来配置参数 {}:item和item1合并后的结果 item:默认属性 item1:新增属性,如果item1和item属性重合则会覆盖item1中的属性 <span id="Test"></span> var item={"name":&

  • AngularJS中一般函数参数传递用法分析

    本文实例讲述了AngularJS中一般函数参数传递用法.分享给大家供大家参考,具体如下: 1. 模型参数 直接使用变量名,不要加引号 <!doctype html> <html ng-app="passAter"> <head> <meta charset="utf-8"/> </head> <body> <div ng-controller="passCtrl">

  • Jquery中map函数的用法

    很久没用map()这个函数了,由于最近看一篇react的文章,其中有谈到map()这个函数,于是就重新查了一些资料,发现map()函数可以用在不同的地方,下面小编总结具有内容分享给大家,也方便今后查找. 其实,本人一直很少用map()这个函数,因为最近看一篇React的文章,其实有谈及map()函数,于是自己也重新查了一些资料,发现map()函数也可以用在不同的地方: map()函数把每个元素通过函数传递到当前匹配集合中,生成包含返回值的新的Jquery对象 语法:.map(callback(i

  • oracle中add_months()函数及用法总结

    今天对add_months函数进行简单总结一下: add_months 函数主要是对日期函数进行操作,在数据查询的过程中进行日期的按月增加,其形式为: add_months(date,int);其中第一个参数为日期,第二个为按月增加的幅度,例如: add_months (sysdate,2):就是当前日期的两个月之后的时间. 如:表示2个月以后的时间: SQL> select add_months(sysdate,2) from dual; ADD_MONTHS(SYSDATE,+2) ----

  • python中similarity函数实例用法

    1.similarity函数接收两个列表,并返回由两个列表中相同元素组成的列表. 2.函数使用列表推导,遍历所有a列表中的元素,并使用in关键词来判断这些元素是否存在于b列表中. 实例 def similarity(a, b): return [item for item in a if item in b] # EXAMPLES similarity([1, 2, 3], [1, 2, 4]) # [1, 2] 知识点扩充: python 语义similarity_Python:string的

随机推荐