1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
function idate (format, timestamp) { // http://jsphp.co/jsphp/fn/view/idate // + original by: Brett Zamir (http://brett-zamir.me) // + input by: Alex // + bugfixed by: Brett Zamir (http://brett-zamir.me) // + improved by: Theriault // + derived from: date // + derived from: gettimeofday // * example 1: idate('y'); // * returns 1: 9 if (format === undefined) { throw 'idate() expects at least 1 parameter, 0 given'; } if (!format.length || format.length > 1) { throw 'idate format is one char'; } // Fix: Need to allow date_default_timezone_set() (check for this.php_js.default_timezone and use) var date = ((typeof timestamp === 'undefined') ? new Date() : // Not provided (timestamp instanceof Date) ? new Date(timestamp) : // Javascript Date() new Date(timestamp * 1000) // UNIX timestamp (auto-convert to int) ), a; switch (format) { case 'B': return Math.floor(((date.getUTCHours() * 36e2) + (date.getUTCMinutes() * 60) + date.getUTCSeconds() + 36e2) / 86.4) % 1e3; case 'd': return date.getDate(); case 'h': return date.getHours() % 12 || 12; case 'H': return date.getHours(); case 'i': return date.getMinutes(); case 'I': // capital 'i' // Logic derived from getimeofday(). // Compares Jan 1 minus Jan 1 UTC to Jul 1 minus Jul 1 UTC. // If they are not equal, then DST is observed. a = date.getFullYear(); return 0 + (((new Date(a, 0)) - Date.UTC(a, 0)) !== ((new Date(a, 6)) - Date.UTC(a, 6))); case 'L': a = date.getFullYear(); return (!(a & 3) && (a % 1e2 || !(a % 4e2))) ? 1 : 0; case 'm': return date.getMonth() + 1; case 's': return date.getSeconds(); case 't': return (new Date(date.getFullYear(), date.getMonth() + 1, 0)).getDate(); case 'U': return Math.round(date.getTime() / 1000); case 'w': return date.getDay(); case 'W': a = new Date(date.getFullYear(), date.getMonth(), date.getDate() - (date.getDay() || 7) + 3); return 1 + Math.round((a - (new Date(a.getFullYear(), 0, 4))) / 864e5 / 7); case 'y': return parseInt((date.getFullYear() + '').slice(2), 10); // This function returns an integer, unlike date() case 'Y': return date.getFullYear(); case 'z': return Math.floor((date - new Date(date.getFullYear(), 0, 1)) / 864e5); case 'Z': return -date.getTimezoneOffset() * 60; default: throw 'Unrecognized date format token'; } }
1 2 3 4 5 6 7 8 9 10 11 12
function idate_tests() { // API reference: http://docs.jquery.com/QUnit module( "idate" ); test( "idate", function() { equal( 12, idate( 'y' ) ); } ); }
There are no comments yet, be the first!