🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### 1.1.2 JavaScript日期函数strftime(1) 很多编程语言都提供strftime或类似的函数。它对日期或时间戳进行操作,接受一个格式字符串,然后产生一个代表该日期的格式化字符串。例如,在Ruby中,提供strftime作为对时间或日期对象的方法,在清单1.1中我们给出它的使用实例。 清单1.1 Ruby中的Time#strftime ~~~ Time.now.strftime("Printed on %m/%d/%Y") #=>"Printed on 09/09/2010" ~~~ 清单1.2中给出了在JavaScript中实现strftime的最初版本。它是在Date.prototype上实现的,因此所有的日期对象都会有这个方法。这里需要提醒的是,如果您读不懂本章的代码也没关系。概念比实际的代码要重要,我们将会在第2章中讨论最先进的技巧。 清单1.2 JavaScript strftime的起点 ~~~ Date.prototype.strftime =(function (){ function strftime(format){ var date =this; return (format +"").replace(/%([a-zA-Z ])/g, function (m,f){ var formatter =Date.formats &&Date.formats [f]; if (typeof formatter =="function"){ return formatter.call(Date.formats,date); }else if (typeof formatter =="string"){ return date.strftime(formatter); } return f; }); } //Internal helper function zeroPad(num){ return (+num <10 ?"0":"")+num; } Date.formats ={ //Formatting methods d:function (date){ return zeroPad(date.getDate()); }, m:function (date){ return zeroPad(date.getMonth()+1); }, y:function (date){ return date.getYear()%100; }, Y:function (date){ return date.getFullYear(); }, //Format shorthands F:"%Y-%m-%d", D:"%m/%d/%y" }; return strftime; }()); ~~~ Date.prototype.strftime函数主要有两部分: 首先,replace函数用于把格式说明符替换成它们相应的值,紧接着,Date.formats对象则是一组帮助函数。它可以分解如下: Date.formats是一个对象,以格式说明符为关键字,由方法从日期中取出相应的数据作为值。 有些格式说明符只是为了方便,作为长格式的捷径。 String.prototype.replace和一个用于匹配格式说明符的正则表达式一起使用。 replacer函数检查在Date.formats中是否有给定的说明符,如果有,就用它;没有,则不改变说明符(直接返回说明符)。 您将如何测试这个方法呢?一种办法是在网页中包含这个脚本,然后在需要的地方使用它,并且手工校验网站能否正确显示日期。如果它有问题,我们可能也得不到什么线索,只能跟踪调试。一种稍复杂一点的办法(其实也复杂不了多少)是在网页中加载它,然后打开控制台,在其中使用它。如清单1.3中所示的会话。 清单1.3 在Firebug中手工检查代码 ~~~ >>>var date =new Date(2009,11,5); >>>date.strftime("%Y"); "2009" >>>date.strftime("%m"); "12" >>>date.strftime("%d"); "05" >>>date.strftime("%y"); "9" ~~~