Date在js中和Array类似,都是拥有自己的特殊方法的特殊对象。

  由于平常用到Date着实不多,对它的了解颇浅。上周被问到怎么样获取某年某个月的天数,我当时想了一会儿,回答说有两种,一种自己写判断闰年的逻辑,每个月天数分两种情况存数组,一种是利用js Date对象的特性(其实是他总结的...)。不过具体用到什么特性我答不上来。现在既然想起来了,也学习总结一下好了。

  1.Date get和set系列

  (注:getTime()具体的参照时间为1970年1月1日8点0分0秒)

  所有的set对应都有get系列,详情参照 http://www.w3school.com.cn/jsref/jsref_obj_date.asp。

  值得注意的是所有的get和set都必须初始化一个实例并以实例的属性方式调用。如:

  其实也很容易理解,毕竟要设置或者返回Date对象的值,肯定这个值得先存在啊。标准点的写法是var date=new Date(2015,7,30);date.getDate()

  如果new Date()里面没有传任何参数,也没有用任何set系列方法,那么就指的是当前的值(本地计算时钟),包括时分秒。js中可以很容易用这个特征来以任何形式显示当前时间。

var date = new Date(),nowYear = date.getFullYear(),nowMonth = date.getMonth() + 1,  //注意getMonth从0开始,getDay()也是(此时0代表星期日)nowDay = date.getDate(),nowHour = date.getHours(),nowMinute = date.getMinutes(),nowSecond = date.getSeconds(),weekday = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],nowWeek = weekday[date.getDay()];
console.log(nowYear + '年' + nowMonth + '月' + nowDay + '日' + nowHour + '时' + nowMinute + '分' + nowSecond + '秒' + nowWeek);

  同样,利用内置的 setInterval 或者 setTimeout 回调自身的方法,可以很容易的做时钟效果。见w3cSchool http://www.w3school.com.cn/tiy/t.asp?f=jsrf_date_timing_clock。

  2.其它方法

  首先是每个对象都有的valueOf()(得到真实值)和toString()(得到字符串形式表示值)。注意红色框内的不同。

  

  然后是

    toTimeString() :将Date对象时间部分转化为字符串并返回,因此必须有时间参数,必须有实例,

    toDateString() :将Date对象的日期部分转化为字符串并返回,必须有实例。

  最后是

    parse() : 返回1970年1月1日8点整到指定日期(字符串)的毫秒数,精确到秒。只能用Date.parse(Date实例)的形式调用。 (注意比较getTime(),精确到毫秒。)

    toSource() : 返回源代码。

  注:toLocaleString:根据本地时间格式,将Date对象转化为字符串,与UTC,GMT对应,在Array和在Date中这个方法都已经过时,就不再纠结。UTC系列用得很少,也就是格式有所不同,详情参见http://www.w3school.com.cn/jsref/jsref_obj_date.asp。

  3.重要知识点小结

  (1)set系列的参数讨论

    setFullYear()前三个参数有用,时分秒还是本地的~~~

    其它set系列都只有第一个参数有用,返回值分别为在new Date()(当前时间)的基础上加上了Month/Date/Minutes * 对应的第一个参数。

  (2)设置完整时间

  

  很明显setTime也是set系列,故而只是在原来的基础上增加了1992毫秒(显示为1s)。由于setTime比较特殊,是以1970年1月1日早上8点( FF、Chrome、IE5+、Opera (safari用得少就没测) 中测试,虽然w3School中说是0点,但是测试一下new Date(1970,0,1,8,0,0).getTime()显示为0就很明显了 )为基准开始算的,因此在实际执行前其实date实例已经不是new Date()所对应的当前时间了,而是有一个被转化为基准时间的过程。所以显示的为1970,0,1,8,0,1。如果将1992改为5000则为1970,0,1,8,0,5。

  而设置完整时间的方法,为new Date对象的时候传入需要设置的时间的参数。可以为1992,10,3,10,2,50 (还可以加上毫秒级,然后用getTime()检测出来,但是一般用不上) 的数字形式 (表示1992年11月3日10时2分50秒),也可以为标准字符串格式(但一般不会这么写吧~~~)。

  (3)getDate()

  一般放在后面就是用来压轴用的,嘿嘿。

  作为get系列,除了参数的个数有些讲究之外,参数的取值也是很有讲究的。首先回答最初的问题,得到某年某个月的最大天数(可以理解为判断闰年~)。

new Date(2014,2,0).getDate();     //返回2014年2月份的最后一天(28)

  当第三个参数为0的时候,其实是返回上一个月的最后一天 (注意月份的数字2实际上是三月份,故而代码是返回2月份的最后一天在当月中的序号)。看更多例子

new Date(2014,1,30).getDate();     //返回2014年3月2日在3月份中的天数(2)
new Date(2014,2,-1).getDate();     //返回2014年2月份的倒数第二天(27)//当参数缺少的时候显示1
new Date(2014,8).getDate();
new Date(14,18).getDate();
new Date(180).getDate();//当参数多余的时候多余的不起作用(并没有设置对arguments[3+]的操作)
new Date(2015,2,0,2).getDate();  

  天数多了会自动往下月计算,天数为负数则往上个月计算。参数少了有问题,多了的话多的部分没作用。对比其它的set系列其实也差不多就是这么个实现的思路,看(2)就知道了。

  (4)兼容性  

类似 new Date('xxxx/xx/xx xx:xx:xx') 形式的时间对象在 IOS 和 Andriod 系统上都可以被正确的识别,而类似 new Date('xxxx-xx-xx xx:xx:xx') 形式的时间对象在 ios 系统上无法被正确的识别,需要做一层转化。

function parseDate(dateStr) {if (!dateStr) {return new Date();}if (dateStr.indexOf('/') > -1) {return new Date(dateStr);} else {return new Date(dateStr.replace(/-/g, '/'));}
}

  

  我明明记得还有个什么挺重要的部分没写,但就是忘了~~~待我想起来再添加上去。如果本文中有什么纰漏或者不正确的地方,欢迎指正,谢谢!

转载于:https://www.cnblogs.com/codetker/p/4690424.html

js Date对象总结相关推荐

  1. JS - Date对象转时间戳

    JS Date对象转时间戳 关于Date对象转时间戳其实有蛮多例如dayjs这样的库能直接处理,不过前段时间在项目里只需要对两个日期时间进行比较,就没必要安装第三方库,简单记录一下我了解的几种方法: ...

  2. js Date 对象用于处理日期和时间。

    来源:http://www.cnblogs.com/jianshao810/archive/2010/09/09/1821861.html Date 对象用于处理日期和时间. 创建 Date 对象的语 ...

  3. Js Date对象 简单操作

    //JavaScript Document var finalMonth =['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct',' ...

  4. JS DATE对象详解

    1.建立时间对象:可获取年,月,日,星期,时,分,秒 var d = new Date(); console.log(d.getFullYear()+'年'+d.getMonth()+'月'+d.ge ...

  5. 扩展 js Date 对象,实现时间美化

    背景 Date对象是 javascript 中常用的对象之一,用来提供和解析时间与日期. 通常,后端返回的数据中,日期是2020-06-23T12:01:59+08:00这种,或是其他不符合前端显示需 ...

  6. JS Date对象计算100天以后的时间

    核心:setDate(); 属性 描述 setDate() 必需.表示一个月中的一天的一个数值(1 ~ 31):0 为上一个月的最后一天-1 为上一个月最后一天之前的一天如果当月有 31 天:32 为 ...

  7. JS一起学05:Date对象、封闭空间、函数传参和封装、获取非行间样式、字符串操作

    一.Date对象 1. 获取 oDate.getFullYear() 获取年份 oDate.getMonth()+1  获取月份 0-11----->1-12 oDate.getDate() 获 ...

  8. json Date对象在js中的处理办法

    我们在程序用往往通过ajax方式返回json数据,json中包含Date对象时,在js中是Object对象.可以方式获取: 1.new Date(yourJsonDate.time); //你用你的返 ...

  9. 前端:JS/23/JS内置对象(String对象,Array对象,Date对象,Boolean对象,Number对象,Math对象),实例:求圆的面积,求直角三角形

    JS内置对象 1,String对象 字符串对象,提供了对字符串进行操作的属性和方法 2,Array对象 数组对象,提供了数组操作方面的属性和方法 3,Date对象 日期时间对象,可以获取系统的日期时间 ...

最新文章

  1. 系统指纹 中间指纹 web指纹 识别简介
  2. 2019小程序没必要做了_2019微信小程序的发展前景怎么样?有必要开发微信小程序吗?...
  3. Docker学习文档之二 搭建环境-Linux环境
  4. 新的实现上下文对话的方法
  5. openstack windows下远程debug调试(komodo)
  6. 细说ip地址与同一网段
  7. 学生信息管理系统需求规格说明书
  8. 云服务器 微信支付开发,WeX5怎么样实现支付宝和微信支付接口
  9. Java泛型入门篇: 泛型类、泛型接口以及泛型方法
  10. 基于社会工程学的网络攻击手段分析
  11. PR值与网站权重的关系
  12. 格创东智品牌形象升级,新Logo尽显创新活力
  13. NISP一级知识点学习笔记总结
  14. nemesis什么车_世界上十大最强的超级跑车,Trion Nemesis排名第一
  15. 有效运用 Color mask 和开发 Automation material - PART 1
  16. Android自定义View实现炫酷的加速球效果
  17. nohup: 忽略输入 Error: Unable to access jarfile【已解决】
  18. JSP+MySQL房屋租赁管理系统
  19. 因特网的服务器协议,因特网信息访问协议
  20. AI+PS插画的运用与制作

热门文章

  1. sscanf函数和正则表达式
  2. Taro+react开发(72):Taro.createSelectorQuery
  3. react(93)--成功置空
  4. 前端学习(3024):vue+element今日头条管理-关于默认子路由的问题
  5. [css] css中的baseline,你知道吗?
  6. 工作227:小程序学习1开始布局页面
  7. 前端学习(1964)vue之电商管理系统电商系统之渲染分类参数的tab页标签
  8. 前端学习(1437):vue一些链接
  9. 前端学习(1328):服务器基础概念
  10. Java面试题19 牛客下面有关java的引用类型,说法正确的有?