[Javascript] 轻量级的JavaScript日期处理类库xDate使用指南
XDate是一个请谅解的JavaScript的原生Date对象的封装库,提供增强的功能解析,格式化和日期处理。使用起来就和JavaScript自己的对象和方法一样,非常简单。

XDate是一个请谅解的JavaScript的原生Date对象的封装库,提供增强的功能解析,格式化和日期处理。使用起来就和JavaScript自己的对象和方法一样,非常简单。
使用说明:
<script src="xdate.js"></script>
之后就可以了 new 一个日期出来,如
var d = new XDate("2012-9-9");
var c = new XDate(2012, 7, 8);
d.addDays(10);
var a = d.toString("yyyy/MM/dd");
Constructors
- new XDate()
- 使用当前的日期和时间创建一个新的XDate
- new XDate(xdate)
- 创建一个新的XDate从一个xdate对象
- new XDate(nativeDate)
- 创建一个新的XDate从一个指定的日期
- new XDate(milliseconds)
- 通过UTC毫秒数创建一个新的XDate。
- new XDate(year, month, date, hours, minutes, seconds, milliseconds)
- new XDate(dateString)
Read more about date-string parsing
下面是xDate的常用方法:
Getters
- .getFullYear()
- Returns the 4-digit year (ex: 2012)
- .getMonth()
- Returns the month of the year. (0-11)
Value is zero-index, meaning Jan=0, Feb=1, Mar=2, etc. - .getWeek()
- Returns the ISO week number of the year. (1-53)
- .getDate()
- Returns the date of the month. (1-31)
- .getDay()
- Returns the day-of-week as a number. (0-6)
Sun=0, Mon=1, Tue=2, etc. - .getHours()
- Returns the hour of the day. (0-23)
- .getMinutes()
- Returns the minute of the hour. (0-59)
- .getSeconds()
- Returns the second of the minute. (0-59)
- .getMilliseconds()
- Returns the millisecond of the second. (0-999)
- .getTime()
- Returns the number of milliseconds since the epoch.
- .valueOf()
- Returns the number of milliseconds since the epoch. Identical to
getTime.
Setters
- .setFullYear(year, preventOverflow)
yearis a 4-digit year- .setMonth(month, preventOverflow)
monthis zero-indexed, meaning Jan=0, Feb=1, Mar=2, etc.- .setWeek(week, year)
-
Moves the xdate to the Monday of the given week with time 00:00:00. The week is represented by a given ISO week number and an optional
year. Ifyearis omitted, the xdate's year with be used. - .setDate(date)
- Sets the date of the month. (1-31)
- .setHours(hours)
- Sets the hour of the day. (0-23)
- .setMinutes(minutes)
- Sets the minute of the hour. (0-59)
- .setSeconds(seconds)
- Sets the second of the minute. (0-59)
- .setMilliseconds(milliseconds)
- Sets the millisecond of the second. (0-999)
- .setTime(milliseconds)
- Sets the number of milliseconds since the epoch.
Setting preventOverflow to true prevents a date from "overflowing" into the next month. Example:
d=newXDate(2011,7,31);// August 31d.setMonth(8);// Septemberd.toString();// October 1st!!! because there are only 30 says in September// let's try this with preventOverflow...d=newXDate(2011,7,31);// August 31d.setMonth(8,true);// Septemberd.toString();// September 30!
Setting preventOverflow to true guarantees the date will be in desired month. It is optional and defaults to false.
Adding
The following methods add or subtract time from the XDate:
- .addYears(years, preventOverflow)
- .addMonths(months, preventOverflow)
- .addWeeks(weeks)
- .addDays(days)
- .addHours(hours)
- .addMinutes(minutes)
- .addSeconds(seconds)
- .addMilliseconds(milliseconds)
If a value is negative, subtraction will occur. Values may be floating-point numbers.
Please note, these methods directly modify the object. Use clone if you need a copy.
Diffing
The following methods return the amount of time that must be added to the XDate in order to arrive at otherDate.
- .diffYears(otherDate)
- .diffMonths(otherDate)
- .diffWeeks(otherDate)
- .diffDays(otherDate)
- .diffHours(otherDate)
- .diffMinutes(otherDate)
- .diffSeconds(otherDate)
- .diffMilliseconds(otherDate)
otherDate can be an XDate, a native Date, a milliseconds time, or a date-string.
The results will be positive or negative depending on the ordering of the dates:
varthanksgiving=newXDate(2011,10,24);varchristmas=newXDate(2011,11,25);thanksgiving.diffDays(christmas);// 31christmas.diffDays(thanksgiving);// -31
Also, the result can potentially be a floating-point number:
varjan2011=newXDate(2011,0,1);varjul2012=newXDate(2012,6,1);jan2011.diffYears(jul2012);// 1.5
You'll have to do the rounding or flooring yourself.
Parsing
Date-strings must either be in ISO8601 format or IETF format (like "Mon Sep 05 2011 12:30:00 GMT-0700 (PDT)")
ISO8601 is the preferred format. Examples:
"2011-09-05""2011-09-05T12:30:00""2011-09-05T12:30:00-07:00""2011-09-05T12:30:00Z"
Advanced: extending the parser
Formatting
- .toString(formatString, settings)
- If
formatStringis not specified, a browser-produced IETF string will be returned.settingscan be a name of an available locale or an object that overrides the default locale's settings. - .toUTCString(formatString, settings)
- Same as
toStringbut gets its values from the UTC version of the date. As a result, "Z" will be displayed as the timezone. - .toISOString()
- Returns an ISO8601 string that has been normalized to UTC. Will have a "Z" timezone indicator. See the native Date's specs for toISOString.
- .toDateString()
- Same as native Date's toDateString
- .toTimeString()
- Same as native Date's toTimeString
- .toLocaleString()
- Same as native Date's toLocaleString
- .toLocaleDateString()
- Same as native Date's toLocaleDateString
- .toLocaleTimeString()
- Same as native Date's toLocaleTimeString
A formatString can contain any of the following tokens:
| fff | milliseconds, 3-digits |
|---|---|
| s | seconds |
| ss | seconds, 2-digits |
| m | minutes |
| mm | minutes, 2-digits |
| h | hours, 12-hour clock |
| hh | hours, 12-hour clock, 2-digits |
| H | hours, 24-hour clock |
| HH | hours, 24-hour clock, 2-digits |
| d | date number |
| dd | date number, 2-digits |
| ddd | day name, 3-characters (like "Sun") |
| dddd | day name, full (like "Sunday") |
| M | month number (Jan=1, Feb=2, etc) |
| MM | month number, 2-digits |
| MMM | month name, 3-characters (like "Jan") |
| MMMM | month name, full (like "January") |
| yy | year, 2-digits |
| yyyy | year, 4-digits |
| t | a/p |
| tt | am/pm |
| T | A/P |
| TT | AM/PM |
| z | timezone offset hour (like "-7") or "Z" |
| zz | timezone offset hour, 2-digits (like "-07") or "Z" |
| zzz | timezone offset hour, 2-digits, and minutes (like "-07:00") or "Z" |
| w | ISO week number |
| ww | ISO week number, 2 digits |
| S | day-of-week ordinal (like "st", "nd", "rd") |
| i | ISO8601 format, without a timezone indicator |
| u | ISO8601 format, with a timezone indicator |
Example:
vard=newXDate(2012,5,8);d.toString("MMM d, yyyy");// "Jun 8, 2012"d.toString("i");// "2012-06-08T00:00:00"d.toString("u");// "2012-06-08T00:00:00-07:00"
If you want to have literal text in your formatString, enclose it in single quotes:
vard=newXDate(2012,5,8);d.toString("'the month is' MMMM");// "the month is June"
A literal single quote is represented by two consecutive single quotes.
If you want to output text only if certain values are non-zero, enclose your tokens in parenthesis:
newXDate(2011,0,1,6,0).toString('M/d/yy h(:mm)TT');// "1/1/11 6AM"newXDate(2011,0,1,6,30).toString('M/d/yy h(:mm)TT');// "1/1/11 6:30AM"
Advanced:
UTC Methods
The following methods are similar to previously mentioned methods but operate on the UTC values of the date:
- .getUTCFullYear()
- .getUTCMonth()
- .getUTCWeek()
- .getUTCDate()
- .getUTCDay()
- .getUTCHours()
- .getUTCMinutes()
- .getUTCSeconds()
- .getUTCMilliseconds()
- .setUTCFullYear(year)
- .setUTCMonth(month)
- .setUTCWeek(week, year)
- .setUTCDate(date)
- .setUTCHours(hours)
- .setUTCMinutes(minutes)
- .setUTCSeconds(seconds)
- .setUTCMilliseconds(milliseconds)
UTC Mode
Just like a native Date, an XDate is represented by its number of milliseconds since the epoch. Also like a native Date, methods like getDate and getHours are dependant upon the client computer's timezone.
However, you can remove this reliance on the client computer's timezone and make a UTC date, a date without a timezone. A date in UTC-mode will have all of its "get" methods identical to its "getUTC" methods and won't experience any daylight-savings time.
A true argument can be appended to any of the constructors to make an XDate in UTC-mode:
d=newXDate(true);// the current date, in UTC-moded.toString();// "Mon, 24 Oct 2011 08:42:08 GMT"d=newXDate(2012,5,8,true);// values will be interpreted as UTCd.toString();// "Fri, 08 Jun 2012 00:00:00 GMT"d=newXDate('2012-06-08',true);// ambiguous timezone, so will be parsed as UTCd.toString();// "Fri, 08 Jun 2012 00:00:00 GMT"
Here are methods that relate to UTC-mode:
- .getUTCMode()
- Returns
trueif the date is in UTC-mode andfalseotherwise - .setUTCMode(utcMode, doCoercion)
utcModemust be eithertrueorfalse. If the optionaldoCoercionparameters is set totrue, the underlying millisecond time of the date will be coerced in such a way that methods likegetDateandgetHourswill have the same values before and after the conversion.- .getTimezoneOffset()
- Returns the number of minutes from UTC, just like the native Date's getTimezoneOffset. However, if the XDate is in UTC-mode,
0will be returned.
Please note, these methods directly modify the object. Use clone if you need a copy.
Utilities
- .clone()
- returns a copy of the XDate
- .clearTime()
- sets the hours, minutes, seconds, and milliseconds to zero
- .valid()
- return
trueif the XDate is a valid date,falseotherwise - .toDate()
- Returns a conversion to a native Date
The following utilities are members of the XDate class and are not associated with a specific XDate instance:
- XDate.getDaysInMonth(year, month)
- Returns the number of days in the given month
- XDate.parse(dateString)
- Parses a date-string and returns milliseconds since the epoch. You'll probably want to use
new XDate(dateString)instead. - XDate.now()
- Returns the current date, as milliseconds since the epoch. You'll probably want to use
new XDate()instead. - XDate.today()
- Returns the current date with time cleared, as an XDate object
- XDate.UTC(year, month, date, hours, minutes, seconds, milliseconds)
- Returns a milliseconds time since the epoch for the given UTC date
Chaining
Many of XDate's methods return a reference to the same XDate object. This allows you to "chain" operations together and makes for more concise code:
d1=newXDate();d2=d1.clone().setUTCMode(true).setDate(1).addMonths(1).addYears(2);
Inconsistencies with Native Date
XDate attempts to be "backwards-compatible" with the native Date object. However, there are two small departures that were made:
If you've never noticed, a native Date object returns it's millisecond value every time there is a "set" method. This is not very helpful. In the same situations, an XDate will return a reference to itself to allow for chaining. This is much more useful, but does not match the way the native Date works.
Also, when a native Date is concatenated with a string (with&n
[Javascript] 轻量级的JavaScript日期处理类库xDate使用指南的更多相关文章
- [Javascript] 5个最佳的Javascript日期处理类库
在大家日常网站开发和web应用开发中,我们往往需要有效的调用Javascript处理日期和时间格式相关的函数,在Javascript中已经包含了部分最基本的内建处理方法. 在大家日常网站开发和web应 ...
- Moment.js 超棒Javascript日期处理类库
Moment.js 不容错过的超棒Javascript日期处理类库 主要特性: 3.2kb超轻量级 独立类库,意味这你不需要倒入一堆js 日期处理支持UNIX 时间戳,String,指定格式的Date ...
- 翻译连载 | 第 9 章:递归(下)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇
原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...
- 翻译连载 |《你不知道的JS》姊妹篇 |《JavaScript 轻量级函数式编程》- 引言&前言
原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 译者团队(排名不分先后):阿希.blueken.brucec ...
- 翻译连载 | 第 10 章:异步的函数式(上)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇
原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...
- 翻译连载 | 第 10 章:异步的函数式(下)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇
原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...
- 翻译连载 | 第 11 章:融会贯通 -《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇
原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...
- 翻译连载 | 附录 A:Transducing(上)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇
原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...
- 翻译连载 | 附录 A:Transducing(下)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇
原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...
随机推荐
- MTK刷机工具Flash_Tool部分4032错误解决办法
MTK刷机工具Flash_Tool部分4032错误解决办法 先说明一点,这个办法不是万能的,我测试解决了以下两种情况下的4032: 1.本来正常的开发板,因为一次刷机失败后就一直变4032了 2.新开 ...
- JavaScript小技巧总结
JavaScript是一种脚本语言: 语法类似于常见的高级语言 脚本语言,不需要编译就可以由解释器直接运行 变量松散定义 面向对象 JSON是一种数据交换格式,而JSONP是JSON的一种使用模式,是 ...
- transparent
transparent属性用来指定全透明色彩
- C# 发起Get和Post请求
public class ApiHelper { //contentType application/json or application/xml public string HttpGet(str ...
- git 还原到某次commit
不可逆提交 一,reset 1.git log查看提交记录 git log 2.选择某次提交的commit ID,ctrl+c复制提交ID 3.使用git reset –hard 还原到某一次提交 g ...
- 关于计算文字显示占用画面大小(System.Drawing.Graphics.MeasureString)
最近遇到了一个需要手动为显示文字换行的场合,网上转了一圈,最后形成了下面的代码: var font = new Font("微软雅黑", 9F); - DETAIL_BASE_IN ...
- [转]理解和配置 Linux 下的 OOM Killer
最近有位 VPS 客户抱怨 MySQL 无缘无故挂掉,还有位客户抱怨 VPS 经常死机,登陆到终端看了一下,都是常见的 Out of memory 问题.这通常是因为某时刻应用程序大量请求内存导致系统 ...
- codeforces 427D Match & Catch(后缀数组,字符串)
题目 参考:http://blog.csdn.net/xiefubao/article/details/24934617 题意:给两个字符串,求一个最短的子串.使得这个子串在两个字符串中出现的次数都等 ...
- PHP多进程初探 --- 利用多进程开发点儿东西吧
[原文地址:https://blog.ti-node.com/blog...] 干巴巴地叨逼叨了这么久,时候表演真正的技术了! 做个高端点儿的玩意吧,加入我们要做一个任务系统,这个系统可以在后台帮我们 ...
- Silverlight之我见——制作星星闪烁动画
圣诞节来了,无聊,做点东西纪念一下. 原理很简单,生成1000个圆,从随机数来布置它们的位置,通过动画来处理它们的透明度,动画时长也是随机生成. 1.创建图形数组并设置背景透明,渐变笔触,大小等,而后 ...