Edit File by line
/home/zeestwma/richards.../wp-inclu.../SimplePi.../src/Parse
File: Date.php
'VUT' => 39600,
[500] Fix | Delete
'WAST' => 7200,
[501] Fix | Delete
'WAT' => 3600,
[502] Fix | Delete
'WDT' => 32400,
[503] Fix | Delete
'WEST' => 3600,
[504] Fix | Delete
'WFT' => 43200,
[505] Fix | Delete
'WIB' => 25200,
[506] Fix | Delete
'WIT' => 32400,
[507] Fix | Delete
'WITA' => 28800,
[508] Fix | Delete
'WKST' => 18000,
[509] Fix | Delete
'WST' => 28800,
[510] Fix | Delete
'YAKST' => 36000,
[511] Fix | Delete
'YAKT' => 32400,
[512] Fix | Delete
'YAPT' => 36000,
[513] Fix | Delete
'YEKST' => 21600,
[514] Fix | Delete
'YEKT' => 18000,
[515] Fix | Delete
];
[516] Fix | Delete
[517] Fix | Delete
/**
[518] Fix | Delete
* Cached PCRE for Date::$day
[519] Fix | Delete
*
[520] Fix | Delete
* @access protected
[521] Fix | Delete
* @var string
[522] Fix | Delete
*/
[523] Fix | Delete
public $day_pcre;
[524] Fix | Delete
[525] Fix | Delete
/**
[526] Fix | Delete
* Cached PCRE for Date::$month
[527] Fix | Delete
*
[528] Fix | Delete
* @access protected
[529] Fix | Delete
* @var string
[530] Fix | Delete
*/
[531] Fix | Delete
public $month_pcre;
[532] Fix | Delete
[533] Fix | Delete
/**
[534] Fix | Delete
* Array of user-added callback methods
[535] Fix | Delete
*
[536] Fix | Delete
* @access private
[537] Fix | Delete
* @var array<string>
[538] Fix | Delete
*/
[539] Fix | Delete
public $built_in = [];
[540] Fix | Delete
[541] Fix | Delete
/**
[542] Fix | Delete
* Array of user-added callback methods
[543] Fix | Delete
*
[544] Fix | Delete
* @access private
[545] Fix | Delete
* @var array<callable(string): (int|false)>
[546] Fix | Delete
*/
[547] Fix | Delete
public $user = [];
[548] Fix | Delete
[549] Fix | Delete
/**
[550] Fix | Delete
* Create new Date object, and set self::day_pcre,
[551] Fix | Delete
* self::month_pcre, and self::built_in
[552] Fix | Delete
*
[553] Fix | Delete
* @access private
[554] Fix | Delete
*/
[555] Fix | Delete
public function __construct()
[556] Fix | Delete
{
[557] Fix | Delete
$this->day_pcre = '(' . implode('|', array_keys($this->day)) . ')';
[558] Fix | Delete
$this->month_pcre = '(' . implode('|', array_keys($this->month)) . ')';
[559] Fix | Delete
[560] Fix | Delete
static $cache;
[561] Fix | Delete
if (!isset($cache[get_class($this)])) {
[562] Fix | Delete
$all_methods = get_class_methods($this);
[563] Fix | Delete
[564] Fix | Delete
foreach ($all_methods as $method) {
[565] Fix | Delete
if (strtolower(substr($method, 0, 5)) === 'date_') {
[566] Fix | Delete
$cache[get_class($this)][] = $method;
[567] Fix | Delete
}
[568] Fix | Delete
}
[569] Fix | Delete
}
[570] Fix | Delete
[571] Fix | Delete
foreach ($cache[get_class($this)] as $method) {
[572] Fix | Delete
$this->built_in[] = $method;
[573] Fix | Delete
}
[574] Fix | Delete
}
[575] Fix | Delete
[576] Fix | Delete
/**
[577] Fix | Delete
* Get the object
[578] Fix | Delete
*
[579] Fix | Delete
* @access public
[580] Fix | Delete
* @return Date
[581] Fix | Delete
*/
[582] Fix | Delete
public static function get()
[583] Fix | Delete
{
[584] Fix | Delete
static $object;
[585] Fix | Delete
if (!$object) {
[586] Fix | Delete
$object = new Date();
[587] Fix | Delete
}
[588] Fix | Delete
return $object;
[589] Fix | Delete
}
[590] Fix | Delete
[591] Fix | Delete
/**
[592] Fix | Delete
* Parse a date
[593] Fix | Delete
*
[594] Fix | Delete
* @final
[595] Fix | Delete
* @access public
[596] Fix | Delete
* @param string $date Date to parse
[597] Fix | Delete
* @return int|false Timestamp corresponding to date string, or false on failure
[598] Fix | Delete
*/
[599] Fix | Delete
public function parse(string $date)
[600] Fix | Delete
{
[601] Fix | Delete
foreach ($this->user as $method) {
[602] Fix | Delete
if (($returned = call_user_func($method, $date)) !== false) {
[603] Fix | Delete
return (int) $returned;
[604] Fix | Delete
}
[605] Fix | Delete
}
[606] Fix | Delete
[607] Fix | Delete
foreach ($this->built_in as $method) {
[608] Fix | Delete
// TODO: we should really check this in constructor but that would require private properties.
[609] Fix | Delete
/** @var callable(string): (int|false) */
[610] Fix | Delete
$callable = [$this, $method];
[611] Fix | Delete
if (($returned = call_user_func($callable, $date)) !== false) {
[612] Fix | Delete
return $returned;
[613] Fix | Delete
}
[614] Fix | Delete
}
[615] Fix | Delete
[616] Fix | Delete
return false;
[617] Fix | Delete
}
[618] Fix | Delete
[619] Fix | Delete
/**
[620] Fix | Delete
* Add a callback method to parse a date
[621] Fix | Delete
*
[622] Fix | Delete
* @final
[623] Fix | Delete
* @access public
[624] Fix | Delete
* @param callable $callback
[625] Fix | Delete
* @return void
[626] Fix | Delete
*/
[627] Fix | Delete
public function add_callback(callable $callback)
[628] Fix | Delete
{
[629] Fix | Delete
$this->user[] = $callback;
[630] Fix | Delete
}
[631] Fix | Delete
[632] Fix | Delete
/**
[633] Fix | Delete
* Parse a superset of W3C-DTF (allows hyphens and colons to be omitted, as
[634] Fix | Delete
* well as allowing any of upper or lower case "T", horizontal tabs, or
[635] Fix | Delete
* spaces to be used as the time separator (including more than one))
[636] Fix | Delete
*
[637] Fix | Delete
* @access protected
[638] Fix | Delete
* @param string $date
[639] Fix | Delete
* @return int|false Timestamp
[640] Fix | Delete
*/
[641] Fix | Delete
public function date_w3cdtf(string $date)
[642] Fix | Delete
{
[643] Fix | Delete
$pcre = <<<'PCRE'
[644] Fix | Delete
/
[645] Fix | Delete
^
[646] Fix | Delete
(?P<year>[0-9]{4})
[647] Fix | Delete
(?:
[648] Fix | Delete
-?
[649] Fix | Delete
(?P<month>[0-9]{2})
[650] Fix | Delete
(?:
[651] Fix | Delete
-?
[652] Fix | Delete
(?P<day>[0-9]{2})
[653] Fix | Delete
(?:
[654] Fix | Delete
[Tt\x09\x20]+
[655] Fix | Delete
(?P<hour>[0-9]{2})
[656] Fix | Delete
(?:
[657] Fix | Delete
:?
[658] Fix | Delete
(?P<minute>[0-9]{2})
[659] Fix | Delete
(?:
[660] Fix | Delete
:?
[661] Fix | Delete
(?P<second>[0-9]{2})
[662] Fix | Delete
(?:
[663] Fix | Delete
.
[664] Fix | Delete
(?P<second_fraction>[0-9]*)
[665] Fix | Delete
)?
[666] Fix | Delete
)?
[667] Fix | Delete
)?
[668] Fix | Delete
(?:
[669] Fix | Delete
(?P<zulu>Z)
[670] Fix | Delete
| (?P<tz_sign>[+\-])
[671] Fix | Delete
(?P<tz_hour>[0-9]{1,2})
[672] Fix | Delete
:?
[673] Fix | Delete
(?P<tz_minute>[0-9]{1,2})
[674] Fix | Delete
)
[675] Fix | Delete
)?
[676] Fix | Delete
)?
[677] Fix | Delete
)?
[678] Fix | Delete
$
[679] Fix | Delete
/x
[680] Fix | Delete
PCRE;
[681] Fix | Delete
if (preg_match($pcre, $date, $match)) {
[682] Fix | Delete
// Fill in empty matches and convert to proper types.
[683] Fix | Delete
$year = (int) $match['year'];
[684] Fix | Delete
$month = isset($match['month']) ? (int) $match['month'] : 1;
[685] Fix | Delete
$day = isset($match['day']) ? (int) $match['day'] : 1;
[686] Fix | Delete
$hour = isset($match['hour']) ? (int) $match['hour'] : 0;
[687] Fix | Delete
$minute = isset($match['minute']) ? (int) $match['minute'] : 0;
[688] Fix | Delete
$second = isset($match['second']) ? (int) $match['second'] : 0;
[689] Fix | Delete
$second_fraction = isset($match['second_fraction']) ? ((int) $match['second_fraction']) / (10 ** strlen($match['second_fraction'])) : 0;
[690] Fix | Delete
$tz_sign = ($match['tz_sign'] ?? '') === '-' ? -1 : 1;
[691] Fix | Delete
$tz_hour = isset($match['tz_hour']) ? (int) $match['tz_hour'] : 0;
[692] Fix | Delete
$tz_minute = isset($match['tz_minute']) ? (int) $match['tz_minute'] : 0;
[693] Fix | Delete
[694] Fix | Delete
// Numeric timezone
[695] Fix | Delete
$timezone = $tz_hour * 3600;
[696] Fix | Delete
$timezone += $tz_minute * 60;
[697] Fix | Delete
$timezone *= $tz_sign;
[698] Fix | Delete
[699] Fix | Delete
// Convert the number of seconds to an integer, taking decimals into account
[700] Fix | Delete
$second = (int) round($second + $second_fraction);
[701] Fix | Delete
[702] Fix | Delete
return gmmktime($hour, $minute, $second, $month, $day, $year) - $timezone;
[703] Fix | Delete
}
[704] Fix | Delete
[705] Fix | Delete
return false;
[706] Fix | Delete
}
[707] Fix | Delete
[708] Fix | Delete
/**
[709] Fix | Delete
* Remove RFC822 comments
[710] Fix | Delete
*
[711] Fix | Delete
* @access protected
[712] Fix | Delete
* @param string $string Data to strip comments from
[713] Fix | Delete
* @return string Comment stripped string
[714] Fix | Delete
*/
[715] Fix | Delete
public function remove_rfc2822_comments(string $string)
[716] Fix | Delete
{
[717] Fix | Delete
$position = 0;
[718] Fix | Delete
$length = strlen($string);
[719] Fix | Delete
$depth = 0;
[720] Fix | Delete
[721] Fix | Delete
$output = '';
[722] Fix | Delete
[723] Fix | Delete
while ($position < $length && ($pos = strpos($string, '(', $position)) !== false) {
[724] Fix | Delete
$output .= substr($string, $position, $pos - $position);
[725] Fix | Delete
$position = $pos + 1;
[726] Fix | Delete
if ($pos === 0 || $string[$pos - 1] !== '\\') {
[727] Fix | Delete
$depth++;
[728] Fix | Delete
while ($depth && $position < $length) {
[729] Fix | Delete
$position += strcspn($string, '()', $position);
[730] Fix | Delete
if ($string[$position - 1] === '\\') {
[731] Fix | Delete
$position++;
[732] Fix | Delete
continue;
[733] Fix | Delete
} elseif (isset($string[$position])) {
[734] Fix | Delete
switch ($string[$position]) {
[735] Fix | Delete
case '(':
[736] Fix | Delete
$depth++;
[737] Fix | Delete
break;
[738] Fix | Delete
[739] Fix | Delete
case ')':
[740] Fix | Delete
$depth--;
[741] Fix | Delete
break;
[742] Fix | Delete
}
[743] Fix | Delete
$position++;
[744] Fix | Delete
} else {
[745] Fix | Delete
break;
[746] Fix | Delete
}
[747] Fix | Delete
}
[748] Fix | Delete
} else {
[749] Fix | Delete
$output .= '(';
[750] Fix | Delete
}
[751] Fix | Delete
}
[752] Fix | Delete
$output .= substr($string, $position);
[753] Fix | Delete
[754] Fix | Delete
return $output;
[755] Fix | Delete
}
[756] Fix | Delete
[757] Fix | Delete
/**
[758] Fix | Delete
* Parse RFC2822's date format
[759] Fix | Delete
*
[760] Fix | Delete
* @access protected
[761] Fix | Delete
* @param string $date
[762] Fix | Delete
* @return int|false Timestamp
[763] Fix | Delete
*/
[764] Fix | Delete
public function date_rfc2822(string $date)
[765] Fix | Delete
{
[766] Fix | Delete
static $pcre;
[767] Fix | Delete
if (!$pcre) {
[768] Fix | Delete
$wsp = '[\x09\x20]';
[769] Fix | Delete
$fws = '(?:' . $wsp . '+|' . $wsp . '*(?:\x0D\x0A' . $wsp . '+)+)';
[770] Fix | Delete
$optional_fws = $fws . '?';
[771] Fix | Delete
$day_name = $this->day_pcre;
[772] Fix | Delete
$month = $this->month_pcre;
[773] Fix | Delete
$day = '([0-9]{1,2})';
[774] Fix | Delete
$hour = $minute = $second = '([0-9]{2})';
[775] Fix | Delete
$year = '([0-9]{2,4})';
[776] Fix | Delete
$num_zone = '([+\-])([0-9]{2})([0-9]{2})';
[777] Fix | Delete
$character_zone = '([A-Z]{1,5})';
[778] Fix | Delete
$zone = '(?:' . $num_zone . '|' . $character_zone . ')';
[779] Fix | Delete
$pcre = '/(?:' . $optional_fws . $day_name . $optional_fws . ',)?' . $optional_fws . $day . $fws . $month . $fws . $year . $fws . $hour . $optional_fws . ':' . $optional_fws . $minute . '(?:' . $optional_fws . ':' . $optional_fws . $second . ')?' . $fws . $zone . '/i';
[780] Fix | Delete
}
[781] Fix | Delete
if (preg_match($pcre, $this->remove_rfc2822_comments($date), $match)) {
[782] Fix | Delete
/*
[783] Fix | Delete
Capturing subpatterns:
[784] Fix | Delete
1: Day name
[785] Fix | Delete
2: Day
[786] Fix | Delete
3: Month
[787] Fix | Delete
4: Year
[788] Fix | Delete
5: Hour
[789] Fix | Delete
6: Minute
[790] Fix | Delete
7: Second
[791] Fix | Delete
8: Timezone ±
[792] Fix | Delete
9: Timezone hours
[793] Fix | Delete
10: Timezone minutes
[794] Fix | Delete
11: Alphabetic timezone
[795] Fix | Delete
*/
[796] Fix | Delete
[797] Fix | Delete
$day = (int) $match[2];
[798] Fix | Delete
// Find the month number
[799] Fix | Delete
$month = $this->month[strtolower($match[3])];
[800] Fix | Delete
$year = (int) $match[4];
[801] Fix | Delete
$hour = (int) $match[5];
[802] Fix | Delete
$minute = (int) $match[6];
[803] Fix | Delete
// Second is optional, if it is empty set it to zero
[804] Fix | Delete
$second = (int) $match[7];
[805] Fix | Delete
[806] Fix | Delete
$tz_sign = $match[8];
[807] Fix | Delete
$tz_hour = (int) $match[9];
[808] Fix | Delete
$tz_minute = (int) $match[10];
[809] Fix | Delete
$tz_code = isset($match[11]) ? strtoupper($match[11]) : '';
[810] Fix | Delete
[811] Fix | Delete
// Numeric timezone
[812] Fix | Delete
if ($tz_sign !== '') {
[813] Fix | Delete
$timezone = $tz_hour * 3600;
[814] Fix | Delete
$timezone += $tz_minute * 60;
[815] Fix | Delete
if ($tz_sign === '-') {
[816] Fix | Delete
$timezone = 0 - $timezone;
[817] Fix | Delete
}
[818] Fix | Delete
}
[819] Fix | Delete
// Character timezone
[820] Fix | Delete
elseif (isset($this->timezone[$tz_code])) {
[821] Fix | Delete
$timezone = $this->timezone[$tz_code];
[822] Fix | Delete
}
[823] Fix | Delete
// Assume everything else to be -0000
[824] Fix | Delete
else {
[825] Fix | Delete
$timezone = 0;
[826] Fix | Delete
}
[827] Fix | Delete
[828] Fix | Delete
// Deal with 2/3 digit years
[829] Fix | Delete
if ($year < 50) {
[830] Fix | Delete
$year += 2000;
[831] Fix | Delete
} elseif ($year < 1000) {
[832] Fix | Delete
$year += 1900;
[833] Fix | Delete
}
[834] Fix | Delete
[835] Fix | Delete
return gmmktime($hour, $minute, $second, $month, $day, $year) - $timezone;
[836] Fix | Delete
}
[837] Fix | Delete
[838] Fix | Delete
return false;
[839] Fix | Delete
}
[840] Fix | Delete
[841] Fix | Delete
/**
[842] Fix | Delete
* Parse RFC850's date format
[843] Fix | Delete
*
[844] Fix | Delete
* @access protected
[845] Fix | Delete
* @param string $date
[846] Fix | Delete
* @return int|false Timestamp
[847] Fix | Delete
*/
[848] Fix | Delete
public function date_rfc850(string $date)
[849] Fix | Delete
{
[850] Fix | Delete
static $pcre;
[851] Fix | Delete
if (!$pcre) {
[852] Fix | Delete
$space = '[\x09\x20]+';
[853] Fix | Delete
$day_name = $this->day_pcre;
[854] Fix | Delete
$month = $this->month_pcre;
[855] Fix | Delete
$day = '([0-9]{1,2})';
[856] Fix | Delete
$year = $hour = $minute = $second = '([0-9]{2})';
[857] Fix | Delete
$zone = '([A-Z]{1,5})';
[858] Fix | Delete
$pcre = '/^' . $day_name . ',' . $space . $day . '-' . $month . '-' . $year . $space . $hour . ':' . $minute . ':' . $second . $space . $zone . '$/i';
[859] Fix | Delete
}
[860] Fix | Delete
if (preg_match($pcre, $date, $match)) {
[861] Fix | Delete
/*
[862] Fix | Delete
Capturing subpatterns:
[863] Fix | Delete
1: Day name
[864] Fix | Delete
2: Day
[865] Fix | Delete
3: Month
[866] Fix | Delete
4: Year
[867] Fix | Delete
5: Hour
[868] Fix | Delete
6: Minute
[869] Fix | Delete
7: Second
[870] Fix | Delete
8: Timezone
[871] Fix | Delete
*/
[872] Fix | Delete
[873] Fix | Delete
$day = (int) $match[2];
[874] Fix | Delete
// Month
[875] Fix | Delete
$month = $this->month[strtolower($match[3])];
[876] Fix | Delete
$year = (int) $match[4];
[877] Fix | Delete
$hour = (int) $match[5];
[878] Fix | Delete
$minute = (int) $match[6];
[879] Fix | Delete
// Second is optional, if it is empty set it to zero
[880] Fix | Delete
$second = (int) $match[7];
[881] Fix | Delete
[882] Fix | Delete
$tz_code = strtoupper($match[8]);
[883] Fix | Delete
[884] Fix | Delete
// Character timezone
[885] Fix | Delete
if (isset($this->timezone[$tz_code])) {
[886] Fix | Delete
$timezone = $this->timezone[$tz_code];
[887] Fix | Delete
}
[888] Fix | Delete
// Assume everything else to be -0000
[889] Fix | Delete
else {
[890] Fix | Delete
$timezone = 0;
[891] Fix | Delete
}
[892] Fix | Delete
[893] Fix | Delete
// Deal with 2 digit year
[894] Fix | Delete
if ($year < 50) {
[895] Fix | Delete
$year += 2000;
[896] Fix | Delete
} else {
[897] Fix | Delete
$year += 1900;
[898] Fix | Delete
}
[899] Fix | Delete
[900] Fix | Delete
return gmmktime($hour, $minute, $second, $month, $day, $year) - $timezone;
[901] Fix | Delete
}
[902] Fix | Delete
[903] Fix | Delete
return false;
[904] Fix | Delete
}
[905] Fix | Delete
[906] Fix | Delete
/**
[907] Fix | Delete
* Parse C99's asctime()'s date format
[908] Fix | Delete
*
[909] Fix | Delete
* @access protected
[910] Fix | Delete
* @param string $date
[911] Fix | Delete
* @return int|false Timestamp
[912] Fix | Delete
*/
[913] Fix | Delete
public function date_asctime(string $date)
[914] Fix | Delete
{
[915] Fix | Delete
static $pcre;
[916] Fix | Delete
if (!$pcre) {
[917] Fix | Delete
$space = '[\x09\x20]+';
[918] Fix | Delete
$wday_name = $this->day_pcre;
[919] Fix | Delete
$mon_name = $this->month_pcre;
[920] Fix | Delete
$day = '([0-9]{1,2})';
[921] Fix | Delete
$hour = $sec = $min = '([0-9]{2})';
[922] Fix | Delete
$year = '([0-9]{4})';
[923] Fix | Delete
$terminator = '\x0A?\x00?';
[924] Fix | Delete
$pcre = '/^' . $wday_name . $space . $mon_name . $space . $day . $space . $hour . ':' . $min . ':' . $sec . $space . $year . $terminator . '$/i';
[925] Fix | Delete
}
[926] Fix | Delete
if (preg_match($pcre, $date, $match)) {
[927] Fix | Delete
/*
[928] Fix | Delete
Capturing subpatterns:
[929] Fix | Delete
1: Day name
[930] Fix | Delete
2: Month
[931] Fix | Delete
3: Day
[932] Fix | Delete
4: Hour
[933] Fix | Delete
5: Minute
[934] Fix | Delete
6: Second
[935] Fix | Delete
7: Year
[936] Fix | Delete
*/
[937] Fix | Delete
[938] Fix | Delete
$month = $this->month[strtolower($match[2])];
[939] Fix | Delete
return gmmktime((int) $match[4], (int) $match[5], (int) $match[6], $month, (int) $match[3], (int) $match[7]);
[940] Fix | Delete
}
[941] Fix | Delete
[942] Fix | Delete
return false;
[943] Fix | Delete
}
[944] Fix | Delete
[945] Fix | Delete
/**
[946] Fix | Delete
* Parse dates using strtotime()
[947] Fix | Delete
*
[948] Fix | Delete
* @access protected
[949] Fix | Delete
* @param string $date
[950] Fix | Delete
* @return int|false Timestamp
[951] Fix | Delete
*/
[952] Fix | Delete
public function date_strtotime(string $date)
[953] Fix | Delete
{
[954] Fix | Delete
$strtotime = strtotime($date);
[955] Fix | Delete
if ($strtotime === -1 || $strtotime === false) {
[956] Fix | Delete
return false;
[957] Fix | Delete
}
[958] Fix | Delete
[959] Fix | Delete
return $strtotime;
[960] Fix | Delete
}
[961] Fix | Delete
}
[962] Fix | Delete
[963] Fix | Delete
class_alias('SimplePie\Parse\Date', 'SimplePie_Parse_Date');
[964] Fix | Delete
[965] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function