You are not logged in.
Login
or
Register
.
JsPHP: a JavaScript library providing the PHP API
Home
Register
Demo
Categories
Functions
Contributors
Download
Links
Comments
FAQ
Contact
View
Edit
Benchmark
Revisions
Developers
Dependencies
Talk
Links
strtotime:
Edit: strtotime
Function:
strtotime
View strtotime
Edit strtotime
Edit code
Edit tests
Edit benchmark
View latest code
Edit latest code
Benchmark strtotime
Comment on strtotime
Comment on the latest code
View revisions
View versions
View contributors
View dependencies
View comments
View links
Download production code
Download development code
View the PHP docs
View phpjs.org
View phpjs.org raw code
Description:
Convert string representation of date and time to a timestamp.
Edit function
Code
:
function strtotime (str, now) { // http://jsphp.co/jsphp/fn/view/strtotime // + original by: Caio Ariede (http://caioariede.com) // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + input by: David // + improved by: Caio Ariede (http://caioariede.com) // + improved by: Brett Zamir (http://brett-zamir.me) // + bugfixed by: Wagner B. Soares // + bugfixed by: Artur Tchernychev // % note 1: Examples all have a fixed timestamp to prevent tests to fail because of variable time(zones) // * example 1: strtotime('+1 day', 1129633200); // * returns 1: 1129719600 // * example 2: strtotime('+1 week 2 days 4 hours 2 seconds', 1129633200); // * returns 2: 1130425202 // * example 3: strtotime('last month', 1129633200); // * returns 3: 1127041200 // * example 4: strtotime('2009-05-04 08:30:00'); // * returns 4: 1241418600 var i, l, match, s, parse = ''; str = str.replace(/\s{2,}|^\s|\s$/g, ' '); // unecessary spaces str = str.replace(/[\t\r\n]/g, ''); // unecessary chars if (str === 'now') { return now === null || isNaN(now) ? new Date().getTime() / 1000 | 0 : now | 0; } else if (!isNaN(parse = Date.parse(str))) { return parse / 1000 | 0; } else if (now) { now = new Date(now * 1000); // Accept PHP-style seconds } else { now = new Date(); } str = str.toLowerCase(); var __is = { day: { 'sun': 0, 'mon': 1, 'tue': 2, 'wed': 3, 'thu': 4, 'fri': 5, 'sat': 6 }, mon: [ 'jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec' ] }; var process = function (m) { var ago = (m[2] && m[2] === 'ago'); var num = (num = m[0] === 'last' ? -1 : 1) * (ago ? -1 : 1); switch (m[0]) { case 'last': case 'next': switch (m[1].substring(0, 3)) { case 'yea': now.setFullYear(now.getFullYear() + num); break; case 'mon': now.setMonth(now.getMonth() + num); break; case 'wee': now.setDate(now.getDate() + (num * 7)); break; case 'day': now.setDate(now.getDate() + num); break; case 'hou': now.setHours(now.getHours() + num); break; case 'min': now.setMinutes(now.getMinutes() + num); break; case 'sec': now.setSeconds(now.getSeconds() + num); break; default: var day = __is.day[m[1].substring(0, 3)]; if (typeof day !== 'undefined') { var diff = day - now.getDay(); if (diff === 0) { diff = 7 * num; } else if (diff > 0) { if (m[0] === 'last') { diff -= 7; } } else { if (m[0] === 'next') { diff += 7; } } now.setDate(now.getDate() + diff); } } break; default: if (/\d+/.test(m[0])) { num *= parseInt(m[0], 10); switch (m[1].substring(0, 3)) { case 'yea': now.setFullYear(now.getFullYear() + num); break; case 'mon': now.setMonth(now.getMonth() + num); break; case 'wee': now.setDate(now.getDate() + (num * 7)); break; case 'day': now.setDate(now.getDate() + num); break; case 'hou': now.setHours(now.getHours() + num); break; case 'min': now.setMinutes(now.getMinutes() + num); break; case 'sec': now.setSeconds(now.getSeconds() + num); break; } } else { return false; } break; } return true; }; match = str.match(/^(\d{2,4}-\d{2}-\d{2})(?:\s(\d{1,2}:\d{2}(:\d{2})?)?(?:\.(\d+))?)?$/); if (match !== null) { if (!match[2]) { match[2] = '00:00:00'; } else if (!match[3]) { match[2] += ':00'; } s = match[1].split(/-/g); s[1] = __is.mon[s[1] - 1] || s[1]; s[0] = +s[0]; s[0] = (s[0] >= 0 && s[0] <= 69) ? '20' + (s[0] < 10 ? '0' + s[0] : s[0] + '') : (s[0] >= 70 && s[0] <= 99) ? '19' + s[0] : s[0] + ''; return parseInt(this.strtotime(s[2] + ' ' + s[1] + ' ' + s[0] + ' ' + match[2]) + (match[4] ? match[4] / 1000 : ''), 10); } var regex = '([+-]?\\d+\\s' + '(years?|months?|weeks?|days?|hours?|min|minutes?|sec|seconds?' + '|sun\\.?|sunday|mon\\.?|monday|tue\\.?|tuesday|wed\\.?|wednesday' + '|thu\\.?|thursday|fri\\.?|friday|sat\\.?|saturday)' + '|(last|next)\\s' + '(years?|months?|weeks?|days?|hours?|min|minutes?|sec|seconds?' + '|sun\\.?|sunday|mon\\.?|monday|tue\\.?|tuesday|wed\\.?|wednesday' + '|thu\\.?|thursday|fri\\.?|friday|sat\\.?|saturday))' + '(\\sago)?'; match = str.match(new RegExp(regex, 'gi')); // Brett: seems should be case insensitive per docs, so added 'i' if (match === null) { return false; } for (i = 0, l = match.length; i < l; i++) { if (!process(match[i].split(' '))) { return false; } } return now.getTime() / 1000 | 0; }
You have to be logged in to edit functions.
Edit tests
Code
:
You have to be logged in to edit tests.
Edit benchmark
Code
:
You have to be logged in to edit benchmarks.
[
top
]
Comments
There are no comments yet, be the first!
Please
Login
or
Register
to post comments.