Date.parse()

Date.parse() 方法解析一个表示某个日期的字符串,并返回从1970-1-1 00:00:00 UTC 到该日期对象(该日期对象的UTC时间)的毫秒数,如果该字符串无法识别,或者一些情况下,包含了不合法的日期数值(如:2015-02-31),则返回值为NaN。 不推荐在ES5之前使用Date.parse方法,因为字符串的解析完全取决于实现。直到至今,不同宿主在如何解析日期字符串上仍存在许多差异,因此最好还是手动解析日期字符串(在需要适应不同格式时库能起到很大帮助)。

  语法 显式调用:

  隐式调用:

  参数 dateString 一个符合 RFC2822 或 ISO 8601 日期格式的字符串(其他格式也许也支持,但结果可能与预期不符)。 返回值 一个表示从1970-1-1 00:00:00 UTC到给定日期字符串所表示时间的毫秒数的数值。如果参数不能解析为一个有效的日期,则返回NaN。 描述 parse 方法接受一个日期字符串(例如 "Dec 25, 1995"),并返回从1970-1-1 00:00:00 UTC到该日期字符串所表示日期的毫秒数。该方法在基于字符串值设置日期值时很有用,例如结合使用setTime() 方法和 Date() 构造函数。 parse 方法接受一个表示时间的字符串,返回相应的时间值。该方法可以接受符合 RFC2822 / IETF 日期语法 (RFC2822 Section 3.3) 的字符串,如 "Mon, 25 Dec 1995 13:30:00 GMT"。该方法能够理解美国大陆时区的缩写,但是为了更通用,应该使用时区偏移,如 "Mon, 25 Dec 1995 13:30:00 +0430" (格林威治的子午线向东偏移4小时30分钟)。如果没有指定时区,默认使用本地时区。 GMT 和 UTC 被看作相等。 如果 RFC2822 Section 3.3 格式中不包含时区信息时,会以本地时区来解析日期字符串。 由于在解析日期字符串时存在偏差会导致结果不一致,因此推荐始终手动解析日期字符串,特别是不同的ECMAScript实现会把诸如“2015-10-12 12:00:00”的字符串解析为NaN,UTC或者本地时间。 ECMAScript 5 ISO-8601 日期格式支持 另外,日期时间字符串也可以使用 ISO 8601 格式。例如,"2011-10-10" (仅日期)或 "2011-10-10T14:48:00" (日期和时间)能够作为参数被传递和解析。 如果参数字符串只包含日期格式,那么将会使用UTC时区来解析该参数。而如果是ISO 8601 格式中规定的时间加日期的格式,则将会被作为本地时区处理。 虽然在日期字符串解析过程中会使用时区修饰符,但返回值总会是从由NaN表示的1970-1-1 00:00:00 UTC到该日期字符串所表示日期的毫秒数。 由于 parse() 是 Date 的一个静态方法 , 所以应该使用 Date.parse() 来调用,而不是作为 Date 的实例方法。   默认时区的区别 当输入为 "March 7, 2014" 时, parse()  将默认使用本地时区。但如果使用 ISO  格式如 "2014-03-07" ,则会被默认为 UTC (ES5 和 ECMAScript 2015) 时区。  因此除非系统本地时区为 UTC,由这些字符串解析出的 Date  对象可能会因为 ECMAScript  版本不同而代表不同的时间。这意味着两个看起来等效的字符串可能因为它们的格式不同而被转换成不同的值。   引擎相关的日期格式 ECMAScript  规范规定:如果一个字符串不符合标准格式,则函数可以使用任何由引擎决定的策略或解析算法。 Date.parse()  对于因包含有无效元素而无法识别的 ISO 格式字符串或者日期应该返回 NaN 。 但是, 在如 ECMA-262 规范中定义的情况,如果因为无效值而导致日期字符串不能被识别为 ISO 格式时,根据浏览器和给定的值不同,返回值可以是,也可以不是 NaN 。比如:

  在 Firefox 30 中会被识别为本地时区的2015年12月25日,而在 Safari 7 中则是无效日期。但是,如果字符串被识别为 ISO 格式并且包含无效值,则在所有遵循 ES5 或者更新标准的浏览器中都会返回 NaN 。

  SpiderMonkey 的引擎策略可以在 jsdate.cpp  中找到。字符串 "10 06 2014"  可以作为非 ISO 格式字符串使用自定义处理方式的例子。参见这篇关于解析如何进行的粗略纲要。

  将会被解析为本地时间 2014年10月6日,而不是6月10日。另一个例子

  例子 例子:使用 Date.parse() 如果 IPOdate 是一个已经存在的 Date 对象,则可以把其设置为本地时间 1995年8月9日。如下:

  其他一些解析非标准格式日期的例子:

  在时区 GMT-0300 中返回 807937200000 ,在其他时区中返回另外的值,因为未指定时区并且不是 ISO 格式,所以默认使用本地时区。

  因为指定了时区 GMT (UTC),所以不管本地时区如何,总是返回 807926400000 。

  在时区 GMT-0300 中返回 807937200000 ,在其他时区中返回另外的值,因为没有时区标志并且不是 ISO 格式,所以作为本地时区处理。

  因为指定了时区 GMT (UTC),所以不管本地时区如何,总是返回 0 。

  在时区 GMT-0400 中返回 14400000,在其他时区中返回另外的值,因为未指定时区并且不是 ISO 格式,所以使用本地时区处理。

  因为指定了时区 GMT (UTC),所以不管本地时区如何,总是返回 14400000 。   规范 规范版本 规范状态 注解 ECMAScript 1st Edition. Implemented in JavaScript 1.0 Standard Initial definition. ECMAScript 5.1 (ECMA-262) Date.parse Standard ISO 8601 format added ECMAScript 2015 (6th Edition, ECMA-262) Date.parse Standard ECMAScript (ECMA-262) Date.parse Living Standard 浏览器兼容性 Report problems with this compatibility data on GitHub desktop mobile server Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet Node.js parse Full support1 Full support12 Full support1 Full support3 Full support3 Full support1 Full support1 Full support18 Full support4 Full support10.1 Full support1 Full support1.0 Full support0.10.0 ISO 8601 format Full support6 Full support12 Full support4 Full support9 Full support6 Full support5.1 Full support37 Full support18 Full support4 Full support10.1 Full support5.1 Full support1.0 Full support0.12.0   兼容性提示 Firefox 49 (Firefox 49 / Thunderbird 49 / SeaMonkey 2.46) 修改了解析2位数年份的方式,从和 Internet Explorer 一致改为和 Google Chrome  浏览器一致。现在,2位数的年份小于等于 50  的将会被解析为21世纪的年份。比如, 04/16/17 ,在之前会被解析为 1917年4月16日,现在将被解析为 2017年4月16日。为了避免任何可能的同步问题或者有歧义的年份,推荐使用 ISO 8601 格式如 "2017-04-16" (bug 1265136)。   相关链接 Date.UTC()    

十个让人惊叫的数据可视化项目

数据可视化是科学、艺术和设计的结合,当枯燥隐晦的数据被数据科学家们以优雅、简明、直观的视觉方式呈现时,带给人们的不仅仅是一种全新的观察世界 的方法,而且往往具备艺术作品般的强大冲击力和说服力。如今数据可视化已经不局限于商业领域,在社会和人文领域的影响力也正在显现,以下我们将介绍的是是 个让人耳目一新、拍案叫绝的数据可视化项目。 一、富人区、穷人区 “富人区、穷人区”是一个互动地图项目,能直观显示美国每个城市的居民收入和房租水平,不同的颜色谱系代表着不同区域的收入水平,你可以搜索每个州、每座城市甚至每个街区的收入状况。   二、谷歌流感趋势 谷歌流感趋势(Google Flu Trends)通过分析人们的搜索关键词来跟踪预测全球流感趋势,这是Google.org的一个公益项目。   三、LoTRProject LOTRProject其实是一个数据可视化项目,它把托尔金《指环王》系列小说(霍比特人,指环王, 以及精灵之钻)里表述的一个巨大而复杂的家谱关系, 通过图表, 地图, 时间轴以及简单文字说明生动地表现了出来。   四、GE 医学影像创新大赛 2011年9月份GE斥资1亿美元启动了GE创新挑战赛,挖掘能够提高早期乳腺癌诊断水平的创意想法。该视觉可视化项目收到了7大类500个提案,其中五位获胜者获得种子资金用于将创意付诸实施。   五、英国同性婚姻法案 英国卫报发起的这个视觉可视化项目能够分析展示在2013年同性婚姻法案上投票的英国议会议员的个人情况,数据包括议员的性别、所在政党和当选时间。   六、2010年美国枪支杀人统计 Periscopic(潜望镜)公司推出的这个数据可视化项目展示了2010年枪支暴力如何提前终止了9595人的生命。数据来自FBI的联合犯罪报告以及世界卫生组织。 图形中的弧线代表受害者理论上可以活到的生命长度,鼠标停留在弧线上将显示更多信息,你还能将图形与枪支型号、种族、性别等进行关联分析。   七、皇后乐队:四个视角 “四个视角”项目显示了语言在皇后乐队歌曲中的重要性,通过分析皇后乐队歌词中的关键词汇,能发现皇后乐队音乐中表达的重要主题,以及每位歌曲作词人的影响力。   八、1851年至今的飓风统计 通过分析来自美国海洋与大气管理局(NOAA)的数据,开发人员John Nelson创建了这个能够分析1851年以来的热带风暴和飓风的数据可视化项目。该项目用颜色区分飓风的强度,卫报的一篇报道中可以看到这个项目的动画版本。   九、纽约市政交通的一天 YouTube用户STLTransit用可视化的方式展示了纽约人一天中如何使用包括地铁在内的市政交通,数据来自General Transit Feed规范数据,STLTransit还未其他城市的交通系统创建了视频。   十、Facebook照片分享 在地图数据可视化方面拥有专长的旧金山一家设计与技术工作室Stanmen制作了一系列视频演示Facebook用户的照片分享行为,该项目将该工作室的George Takei发布的三张照片在三个月内的传播情况进行了可视化分析。 文章来自IT经理网

JavaScript开发者常忽略或误用的七个基础知识点

JavaScript 本身可以算是一门简单的语言,但我们也不断用智慧和灵活的模式来改进它。昨天我们将这些模式应用到了 JavaScript 框架中,今天这些框架又驱动了我们的 Web 应用程序。很多新手开发者被各种强大的 JavaScript 框架吸引进来,但他们却忽略了框架身后浩如星海的 JavaScript 实用技巧。本文将为你呈献其中七个基础知识点: 1. 在 String.prototype.replace 方法中使用 /g 和 /i标志位 令很多 JavaScript 初学者意外的是,字符串的 replace 方法并不会 替换所有匹配的子串——而仅仅替换第一次匹配。当然 JavaScript 老手们都知道这里可以使用正则表达式,并且需要加上一个全局标志位(/g): 1 // Mistake 2 // 踩到坑了 3 var str = "David is an Arsenal fan, which means David is great"; 4 str.replace("David", "Darren"); // "Darren is an Arsenal fan, which means David is great" 5 6 // Desired 7 // 符合预期 8 str.replace(/David/g, "Darren"); // "Darren is an Arsenal fan, which means Darren is great" 另一个基本的逻辑错误就是在大小写不敏感的校验场合(字母可大写可小写)没有忽略大小写,此时 /i标志位就很实用: 1 str.replace(/david/gi, "Darren"); // "Darren will always be an Arsenal fan, which means Darren will always be great" (译注:上面这段例程我没有看懂用意,可能是注释有误吧……) 每个 JavaScript 开发者都曾踩过这两个标志位的坑——因此别忘了在适当的时候用上它们! 2. 类数组对象和 Array.prototype.slice 方法 数组的 slice 方法通常用来从一个数组中抽取片断。但很多开发者不了解的是,这个方法还可以用来将“类数组”元素(比如 arguments 参数列表、节点列表和属性列表)转换成真正的数组:(译注:DOM 元素的属性列表通过 attributes属性获取,比如 document.body.attributes。) 1 var nodesArr = Array.prototype.slice.call(document.querySelectorAll("div")); 2 // "true" array of DIVs 3 // 得到一个由 div 元素组成的“真正的”数组 4 5 var argsArr = Array.prototype.slice.call(arguments); 6 // changes arguments to "true" array 7 // 把 arguments 转换成一个“真正的”数组 你还可以使用一次简单的 slice 调用来克隆一个数组: 1 var clone = myArray.slice(0); //浅克隆 (译注:这里的参数 0 也可以省略,我估计 undefined 被 slice 方法自动转换为 0 了吧。) Array.prototype.slice 绝对是 JavaScript 世界中的一玫珍宝,但 JavaScript 初学者们显然还没有意识到它的全部潜力。 3. Array.prototype.sort 方法 数组的 sort 方法 远远没有被充分利用,而且可能比开发者们想像的更加强大。很多开发者可能觉得sort 方法可以用来做这种事情: 1 [1, 3, 9, 2].sort(); 2     // Returns: [1, 2, 3, 9] 3     // 返回 [1, 2, 3, 9] ……这没错,但它还有更强大的用法,比如这样: 01 [ 02     { name: "Robin Van PurseStrings", age: 30 }, 03     { name: "Theo Walcott", age: 24 }, 04     { name: "Bacary Sagna", age: 28  } 05 ].sort(function(obj1, obj2) { 06     // Ascending: first age less than the previous 07     // 实现增序排列:前者的 age 小于后者 08     return obj1.age – obj2.age; 09 }); 10     // Returns:  11     // [ 12     //    { name: "Theo Walcott", age: 24 }, 13     //    { name: "Bacary Sagna", age: 28  }, 14     //    { name: "Robin Van PurseStrings", age: 30 } 15     // ] 你不仅可以对简单类型的数组项进行排序,可以通过属性来排序对象。如果哪天服务器端发来一段 JSON 数据,而且其中的对象需要排序,你可别忘了这一招! 4. 用 length 属性来截断数组 几乎所有开发者都踩过 JavaScript 的这个坑——“传对象只是传引用”。开发者们经常会试图 把一个数组清空,但实际上却错误地创建了一个新数组。 01 var myArray = yourArray = [1, 2, 3]; 02 03 // <img src="http://static.oschina.net/uploads/img/201308/21075349_wgEO.gif" alt=":("> 04 // 囧 05 myArray = []; // yourArray is still [1, 2, 3] 06               // yourArray 仍然是 [1, 2, 3] 07 08 // The right way, keeping reference 09 // 正确的方法是保持引用 10 myArray.length = 0; // yourArray and myArray both [] 11                     // yourArray 和 myArray(以及其它所有对这个数组的引用)都变成 [] 了 坑里的人们终于明白,原来传对象只是在传引用。因此当我把 myArray 重新赋值为 [] 时,确实会创建出一个新的空数组,但其它对老数组的引用仍然没变!大坑啊!还是换用截断的方法吧,少年。 5. 使用 push 来合并数组 在上面的第 2 节里,我展示了数组的 slice 和 apply 方法所能组合出的几个小妙招,所以对于数组方法的其它技巧,你应该已经做好心理准备了吧。这次我们使用 push 方法来合并数组: 1 var mergeTo = [4,5,6]; 2 var mergeFrom = [7,8,9]; 3 4 Array.prototype.push.apply(mergeTo, mergeFrom); 5 6 mergeTo; // is: [4, 5, 6, 7, 8, 9] 这是一项不为人知的小技巧,简单的原生方法就可以实现数组合并这样的常见任务。 (译注:这个方法的巧妙之外不仅在于 push 方法可以接收多个参数,还涉及到 apply 方法的第二个参数的用法。) 6. 高效探测功能特性和对象属性 很多时候开发者们会像下面这样来探测浏览器的某个特性: 1 if(navigator.geolocation) { 2     // Do some stuff 3     // 在这里干点事情 4 } 当然这可以正常工作,但它并不一定有很好的效率。因为这个对象探测方法会在浏览器中初始化资源。在过去,上面的代码片断可能会在某些浏览器下导致内存泄露。更好、更快的方法是检查对象是否包含某个键名: 1 if("geolocation" in navigator) { 2     // Do some stuff 3     // 在这里干点事情 4 } 键名检查十分简单,而且可以避免内存泄露。另外请注意,如果这个属性的值是假值,那么前一种探测方式将会得到“否”的结果,并不能真正探测出这个键名是否存在。 7. 事件对象的 preventDefault 和 stopPropagation 方法 很多时候,当一个动作元素(比如链接)被点击时,会触发某个功能。显然我们并不希望点击链接时浏览器顺着这个链接跳转,于是我们会习惯性地使用 JavaScript 类库的 Event.stop 方法: 1 $("a.trigger").on("click", function(e) { 2     e.stop(); 3 4     // Do more stuff 5     // 在这里干点事情 6 }); (译注:不知道哪个类库有这个方法,估计其作用相当于 return false; 吧。语法看起来像 jQuery,但 jQuery 并没有这个方法,而且 jQuery 是支持 e.preventDefault 和 e.stopPropagation 方法的。) 这个懒方法有一个问题,它不仅阻止了浏览器的默认动作,同时也阻止了事件继续冒泡。这意味着元素上绑定的其它事件监听器将不会被触发,因为它们根本就不知道有事件发生。此时不妨使用 preventDefault吧! JavaScript 老鸟们看到这篇文章可能会说“我早知道了”,但说不定什么时候,他们就会在某一点上栽跟头。提醒大家留意 JavaScript 中的各种小细节,失之毫厘谬以千里啊! 原文出处: David Walsh   译文出处: CSS魔法 转自:http://www.oschina.net/news/43418/7-javascript-basics-many-developers-aren-t-using-properly

Dwz关闭弹出的窗口

js Date

Date 对象用于处理日期和时间。 创建 Date 对象的语法: var myDate=new Date() Date 对象会自动把当前日期和时间保存为其初始值。 参数形式有以下5种: new Date("month dd,yyyy hh:mm:ss"); new Date("month dd,yyyy"); new Date(yyyy,mth,dd,hh,mm,ss); new Date(yyyy,mth,dd); new Date(ms); 注意最后一种形式,参数表示的是需要创建的时间和GMT时间1970年1月1日之间相差的毫秒数。各种函数的含义如下: month:用英文表示月份名称,从January到December mth:用整数表示月份,从(1月)到11(12月) dd:表示一个月中的第几天,从1到31 yyyy:四位数表示的年份 hh:小时数,从0(午夜)到23(晚11点) mm:分钟数,从0到59的整数 ss:秒数,从0到59的整数 ms:毫秒数,为大于等于0的整数 如: new Date("January 12,2006 22:19:35"); new Date("January 12,2006"); new Date(2006,0,12,22,19,35); new Date(2006,0,12); new Date(1137075575000);   Date() 返回当日的日期和时间。 getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。 getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。 getMonth() 从 Date 对象返回月份 (0 ~ 11)。 getFullYear() 从 Date 对象以四位数字返回年份。 getYear() 请使用 getFullYear() 方法代替。 getHours() 返回 Date 对象的小时 (0 ~ 23)。 getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。 getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。 getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。 getTime() 返回 1970 年 1 月 1 日至今的毫秒数。 getTimezoneOffset() 返回本地时间与格林威治标准时间 (GMT) 的分钟差。 getUTCDate() 根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。 getUTCDay() 根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。 getUTCMonth() 根据世界时从 Date 对象返回月份 (0 ~ 11)。 getUTCFullYear() 根据世界时从 Date 对象返回四位数的年份。 getUTCHours() 根据世界时返回 Date 对象的小时 (0 ~ 23)。 getUTCMinutes() 根据世界时返回 Date 对象的分钟 (0 ~ 59)。 getUTCSeconds() 根据世界时返回 Date 对象的秒钟 (0 ~ 59)。 getUTCMilliseconds() 根据世界时返回 Date 对象的毫秒(0 ~ 999)。 parse() 返回1970年1月1日午夜到指定日期(字符串)的毫秒数。 setDate() 设置 Date 对象中月的某一天 (1 ~ 31)。 setMonth() 设置 Date 对象中月份 (0 ~ 11)。 setFullYear() 设置 Date 对象中的年份(四位数字)。 setYear() 请使用 setFullYear() 方法代替。 setHours() 设置 Date 对象中的小时 (0 ~ 23)。 setMinutes() 设置 Date 对象中的分钟 (0 ~ 59)。 setSeconds() 设置 Date 对象中的秒钟 (0 ~ 59)。 setMilliseconds() 设置 Date 对象中的毫秒 (0 ~ 999)。 setTime() 以毫秒设置 Date 对象。 setUTCDate() 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。 setUTCMonth() 根据世界时设置 Date 对象中的月份 (0 ~ 11)。 setUTCFullYear() 根据世界时设置 Date 对象中的年份(四位数字)。 setUTCHours() 根据世界时设置 Date 对象中的小时 (0 ~ 23)。 setUTCMinutes() 根据世界时设置 Date 对象中的分钟 (0 ~ 59)。 setUTCSeconds() 根据世界时设置 Date 对象中的秒钟 (0 ~ 59)。 setUTCMilliseconds() 根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。 toSource() 返回该对象的源代码。 toString() 把 Date 对象转换为字符串。 toTimeString() 把 Date 对象的时间部分转换为字符串。 toDateString() 把 Date 对象的日期部分转换为字符串。 toGMTString() 请使用 toUTCString() 方法代替。 1 3 toUTCString() 根据世界时,把 Date 对象转换为字符串。 toLocaleString() 根据本地时间格式,把 Date 对象转换为字符串。 toLocaleTimeString() 根据本地时间格式,把 Date 对象的时间部分转换为字符串。 toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串。 UTC() 根据世界时返回 1997 年 1 月 1 日 到指定日期的毫秒数。 valueOf() 返回 Date 对象的原始值。 var objDate=new Date([arguments list]); 转自:http://www.cnblogs.com/jianshao810/archive/2010/09/09/1821861.html