| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- /*
- PHP style date() plugin
- Call in exactly the same way as you do the "date" command in PHP
- e.g. s = $.PHPDate("l, jS F Y", dtDate);
- License:
- PHPDate 1.0 jQuery Plugin
- Copyright (c) 2008 Jon Combe (http://joncom.be)
- Permission is hereby granted, free of charge, to any person
- obtaining a copy of this software and associated documentation
- files (the "Software"), to deal in the Software without
- restriction, including without limitation the rights to use,
- copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following
- conditions:
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- OTHER DEALINGS IN THE SOFTWARE.
- */
- (function($) {
- var aDays = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
- var aMonths = ["January","February","March","April","May","June","July","August","September","October","November","December"];
- // main function
- $.PHPDate = function(sString, dtDate) {
- var sElement = "";
- var sOutput = "";
- // we can cheat with "r"...
- sString = sString.replace(/r/g, "D, j M Y H;i:s O");
- // loop through string
- for (var i = 0; i < sString.length; i++) {
- sElement = sString.charAt(i);
- switch (sElement) {
- case "a": sElement = AMPM(dtDate.getHours()); break;
- case "c":
- sElement = (dtDate.getFullYear() + "-" +
- AddLeadingZero(dtDate.getMonth()) + "-" +
- AddLeadingZero(dtDate.getDate()) + "T" +
- AddLeadingZero(dtDate.getHours()) + ":" +
- AddLeadingZero(dtDate.getMinutes()) + ":" +
- AddLeadingZero(dtDate.getSeconds()));
- var sTemp = dtDate.toString().split(" ")[5];
- if (sTemp.indexOf("-") > -1) {
- sElement += sTemp.substr(sTemp.indexOf("-"));
- } else if (sTemp.indexOf("+") > -1) {
- sElement += sTemp.substr(sTemp.indexOf("+"));
- } else {
- sElement += "+0000";
- }
- break;
- case "d": sElement = AddLeadingZero(dtDate.getDate()); break;
- case "g": sElement = TwelveHourClock(dtDate.getHours()); break;
- case "h": sElement = AddLeadingZero(TwelveHourClock(dtDate.getHours())); break;
- case "i": sElement = AddLeadingZero(dtDate.getMinutes()); break;
- case "j": sElement = dtDate.getDate(); break;
- case "l": sElement = aDays[dtDate.getDay()]; break;
- case "m": sElement = AddLeadingZero(dtDate.getMonth() + 1); break;
- case "n": sElement = dtDate.getMonth() + 1; break;
- case "o": (new Date(FirstMonday(dtDate.getFullYear())) > dtDate) ? sElement = (dtDate.getFullYear() - 1) : sElement = dtDate.getFullYear(); break;
- case "s": sElement = AddLeadingZero(dtDate.getSeconds()); break;
- case "t":
- var dtTemp = new Date(dtDate.valueOf());
- dtTemp.setMonth(dtTemp.getMonth() + 1)
- dtTemp.setDate(0);
- sElement = dtTemp.getDate();
- break;
- case "u": sElement = dtDate.getMilliseconds(); break;
- case "w": sElement = dtDate.getDay(); break;
- case "y": sElement = dtDate.getFullYear().toString().substr(2, 2); break;
- case "z":
- var dtFirst = new Date(dtDate.getFullYear(), 0, 1, 0, 0, 0, 0);
- var dtLast = new Date(dtDate.getFullYear(), dtDate.getMonth(), dtDate.getDate(), 0, 0, 0, 0);
- sElement = Math.round((dtLast.valueOf() - dtFirst.valueOf()) / 1000 / 60 / 60/ 24);
- break;
- case "A": sElement = AMPM(dtDate.getHours()).toUpperCase(); break;
- case "B":
- sElement = Math.floor(((dtDate.getHours() * 60 * 60 * 1000) +
- (dtDate.getMinutes() * 60 * 1000) +
- (dtDate.getSeconds() * 1000) +
- (dtDate.getMilliseconds())) / 86400);
- break;
- case "D": sElement = aDays[dtDate.getDay()].substr(0, 3); break;
- case "F": sElement = aMonths[dtDate.getMonth()]; break;
- case "G": sElement = dtDate.getHours(); break;
- case "H": sElement = AddLeadingZero(dtDate.getHours()); break;
- case "I":
- var dtTempFirst = new Date(dtDate.getFullYear(), 0, 1);
- var dtTempLast = new Date(dtDate.getFullYear(), dtDate.getMonth(), dtDate.getDate());
- var iDaysDiff = (dtTempLast.valueOf() - dtTempFirst.valueOf()) / 1000 / 60 / 60 / 24;
- (iDaysDiff == Math.round(iDaysDiff)) ? sElement = 0 : sElement = 1;
- break;
- case "L": ((new Date(dtDate.getFullYear(), 2, 0)).getDate() == 29) ? sElement = 1 : sElement = 0; break;
- case "M": sElement = aMonths[dtDate.getMonth()].substr(0, 3); break;
- case "N": (dtDate.getDay() == 0) ? sElement = 7 : sElement = dtDate.getDay(); break;
- case "O":
- var sTemp = dtDate.toString().split(" ")[5];
- if (sTemp.indexOf("-") > -1) {
- sElement = sTemp.substr(sTemp.indexOf("-"));
- } else if (sTemp.indexOf("+") > -1) {
- sElement = sTemp.substr(sTemp.indexOf("+"));
- } else {
- sElement = "+0000";
- }
- break;
- case "P":
- var sTemp = dtDate.toString().split(" ")[5];
- if (sTemp.indexOf("-") > -1) {
- var aTemp = sTemp.substr(sTemp.indexOf("-") + 1).split("");
- sElement = ("-" + aTemp[0] + aTemp[1] + ":" + aTemp[2] + aTemp[3]);
- } else if (sTemp.indexOf("+") > -1) {
- var aTemp = sTemp.substr(sTemp.indexOf("+") + 1).split("");
- sElement = ("+" + aTemp[0] + aTemp[1] + ":" + aTemp[2] + aTemp[3]);
- } else {
- sElement = "+00:00";
- }
- break;
- case "S": sElement = DateSuffix(dtDate.getDate()); break;
- case "T":
- sElement = dtDate.toString().split(" ")[5];
- if (sElement.indexOf("+") > -1) {
- sElement = sElement.substr(0, sElement.indexOf("+"));
- } else if (sElement.indexOf("-") > -1) {
- sElement = sElement.substr(0, sElement.indexOf("-"));
- }
- break;
- case "U": sElement = Math.floor(dtDate.getTime() / 1000); break;
- case "W":
- var dtTempFirst = new Date(FirstMonday(dtDate.getFullYear()));
- var dtTempLast = new Date(dtDate.getFullYear(), dtDate.getMonth(), dtDate.getDate());
- sElement = Math.ceil(Math.round((dtTempLast.valueOf() - dtTempFirst.valueOf()) / 1000 / 60 / 60/ 24) / 7);
- break;
- case "Y": sElement = dtDate.getFullYear(); break;
- case "Z":
- (dtDate.getTimezoneOffset() < 0) ? sElement = Math.abs(dtDate.getTimezoneOffset() * 60) : sElement = (0 - (dtDate.getTimezoneOffset() * 60));
- break;
- }
- sOutput += sElement.toString();
- }
- return sOutput;
- }
- // add leading zero
- function AddLeadingZero(iValue) {
- if (iValue < 10) {
- iValue = ("0" + iValue);
- }
- return iValue;
- }
- // Ante meridiem and Post meridiem
- function AMPM(iHours) {
- if (iHours > 11) {
- return "pm";
- } else {
- return "am";
- }
- }
- // date suffix
- function DateSuffix(iDay) {
- var sSuffix = "th";
- switch (parseInt(iDay)) {
- case 1:
- case 21:
- case 31:
- sSuffix = "st";
- break;
- case 2:
- case 22:
- sSuffix = "nd";
- break;
- case 3:
- case 23:
- sSuffix = "rd";
- }
- return sSuffix;
- }
- // find the first Monday in a given year (for ISO 8601 dates)
- function FirstMonday(iYear) {
- var dtTemp = new Date(iYear, 0, 1);
- while (dtTemp.getDay() != 1) {
- dtTemp.setDate(dtTemp.getDate() + 1);
- }
- return dtTemp.valueOf();
- }
- // 12-Hour clock
- function TwelveHourClock(iHours) {
- if (iHours == 0) {
- iHours = 24;
- } else if (iHours > 12) {
- iHours -= 12;
- }
- return iHours;
- }
- })(jQuery);
|