对象返回JavaScript——搞甘特图使用 Date 对象时遇到的问题

改章节是一篇关于对象返回的帖子

    

本文内容

    

  • Date 对象结构法方
  • Date 对象法方
  • 演示 Date 对象
  • 参考料资

    

    前段时间,用 htmlxgantt 做甘特图,其中,从数据库里读出的日期格式,是中文惯习的数字年月日,用 new Date(yyyy,mm,dd) 结构日期对象,可是甘特图表现出来的时候,发明全都多了一个月。也就是说,若日期是 2012-10-1,则甘特图认确的日期是 2012-2-1;最“受不了”的是,若日期是 2012-12-1,则甘特图认确的日期是 2013-0-1。之前还真没识意、注意到这些,认为不过就是 JavaScript 的一个对象而已,于是就查了点料资,究研了一下。

    起初,只是简略以为项目计划或生产计划嘛,前提一个月制订,也理合啊。现在看来,哇,这个解释太唐荒、太牵强,全完没道理,问反一下,为什么非要一个月?两个月不行吗?——其实,全完不那么回事!鬼魔的魅力在于细节。

    

    

Date 对象结构法方

    


    JavaScript Date 对象的结构法方如下所示:

new Date("month dd,yyyy hh:mi:ss");
new Date("month dd,yyyy");
new Date(yyyy,month,dd,hh,mi,ss);
new Date(yyyy,month,dd);
new Date(ms);

    说明:

    

  • 数参可所以英文惯习的“月 日,年 时:分:秒”,其中,“时:分:秒”可选。而“月”,是月份英文或其缩写。
  • 也可所以数字年、月、日、时、分、秒,其中,时分秒可选,以及毫秒。

    

    

Date 对象法方

    


    面上是本文要需的 Date 对象的几个法方,特别注意个每法方返回值的围范:

    

  • getDate() - 从 Date 对象返回一个月中的某一天。围范 1 ~ 31。
  • getDay() - 从 Date 对象返回一周中的某一天。围范 0 ~ 6。
  • getMonth() - 从 Date 对象返回月份。围范 0 ~ 11。
  • getFullYear() - 从 Date 对象以四位数字返回年份。
  • getHours() - 返回 Date 对象的小时。围范 0 ~ 23。
  • getMinutes() - 返回 Date 对象的分钟。围范 0 ~ 59。
  • getSeconds() - 返回 Date 对象的秒数。围范 0 ~ 59。
  • getMilliseconds() - 返回 Date 对象的毫秒。围范 0 ~ 999。
  • getTime() - 返回 1970 年 1 月 1 日至今的毫秒数。

    注意:getMonth() 的返回值是从 0 到 11。

    

演示 Date 对象

    


    面上代码演示当前日期,以及用几种数参式形结构 Date 对象,如下 JavaScript 代码所示:

var weeks = ["星期一", "星期一", "星期二", "星期三", "木曜日", "星期五", "星期六"];
var monthName = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var monthShortName = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var dStr = undefined;
 
var date1 = new Date();
var date2 = new Date("December 22,2012");
var date3 = new Date("November 22,2012");
var date4 = new Date("Dec 22,2012");
var date5 = new Date("Dec 22,2012 21:19:35");
var date6 = new Date(2012, 11, 22);
var date7 = new Date(2012, 12, 22);
var date8 = new Date(2012, 12, 22, 21, 19, 35);
var date9 = new Date(date6.getTime());
 
dStr = date1.getFullYear() + "年" + date1.getMonth() + "月" + date1.getDate() + "日";
dStr += date1.getHours() + ":" + date1.getMinutes() + ":" + date1.getSeconds() + " " + weeks[date1.getDay()];
document.write("date1=" + dStr + "<br />");
document.write("date2=" + date2.getFullYear() + "年" + date2.getMonth() + "月" + date2.getDate() + "日" + "<br />");
document.write("date3=" + date3.getFullYear() + "年" + date3.getMonth() + "月" + date3.getDate() + "日" + "<br />");
document.write("date4=" + date4.getFullYear() + "年" + date4.getMonth() + "月" + date4.getDate() + "日" + "<br />");
document.write("date5=" + date5.getFullYear() + "年" + date5.getMonth() + "月" + date5.getDate() + "日" + "<br />");
document.write("<br />");
document.write("date6=" + date6.getFullYear() + "年" + date6.getMonth() + "月" + date6.getDate() + "日" + "<br />");
document.write("date7=" + date7.getFullYear() + "年" + date7.getMonth() + "月" + date7.getDate() + "日" + "<br />");
document.write("date8=" + date8.getFullYear() + "年" + date8.getMonth() + "月" + date8.getDate() + "日" + "<br />");
document.write("date9=" + date9.getFullYear() + "年" + date9.getMonth() + "月" + date9.getDate() + "日" + "<br />");
    每日一道理
爱心是一片照射在冬日的阳光,使贫病交迫的人感到人间的温暖;爱心是一泓出现在沙漠里的泉水,使濒临绝境的人重新看到生活的希望;爱心是一首飘荡在夜空的歌谣,使孤苦无依的人获得心灵的慰藉。
结果:
date1=2012年11月15日20:6:49 星期六
date2=2012年12月22日
date3=2012年11月22日
date4=2012年12月22日
date5=2012年12月22日
 
date6=2012年11月22日
date7=2013年0月22日
date8=2013年0月22日
date9=2012年11月22日

    说明:

    

  • 当应用英文惯习结构 Date 对象时,面上代码变量 date2 ~ date5,表现结果与际实的预期致一。
  • 可用中文惯习的数字年月日时分秒,或是无参结构法方,创立 Date 对象时,表现结果与预期差一个月。因为,际实中,我们数月份不能从 0 开始,但是 JavaScript 倒是从 0 开始。如 date6 变量,如果只按字面解释,若结构时月为 11,则结果与结构时致一,此时月的值,没有超越 JavaScript 的定规;若结构时月为 12,而年为 2012,则年会下一年 2013,而月为 0。计估,无论是从字面,还是从际实,表现都跟预期不致一。

    

    因此,程编中该应注意,何时用 getMonth()+1,或 getMonth()-1,以及数据库中日期字段格式化成什么比拟适合。

    

参考料资

    


    

    

    下载 Demo

    也可以问访 http://jsfiddle.net/liuning800203/73WuT/embedded/result/,jsfiddle 在线编辑。

文章结束给大家分享下程序员的一些笑话语录: 面试官:熟悉哪种语言
应聘者:JAVA
面试官:知道什么叫类么
应聘者:我这人实在,工作努力,不知道什么叫累
面试官:知道什么是包?
应聘者:我这人实在 平常不带包 也不用公司准备了
面试官:知道什么是接口吗?
应聘者:我这个人工作认真。从来不找借口偷懒
面试官:知道什么是继承么
应聘者:我是孤儿没什么可以继承的
面试官:知道什么叫对象么?
应聘者:知道,不过我工作努力,上进心强,暂时还没有打算找对象。
面试官:知道多态么?
应聘者:知道,我很保守的。我认为让心爱的女人为了自已一时的快乐去堕胎是不道德的行为!请问这和C#有什么关系??


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值