From: Aaron Schulz Date: Wed, 19 Aug 2015 21:23:16 +0000 (-0700) Subject: Made MWTimestamp handle UNIX floats X-Git-Tag: 1.31.0-rc.0~10330^2 X-Git-Url: http://git.cyclocoop.org/%22.%24h.%22?a=commitdiff_plain;h=1d4fe4abf5b59f2c16e9286ac4447987b96d12d7;p=lhc%2Fweb%2Fwiklou.git Made MWTimestamp handle UNIX floats * This avoids "wfTimestamp() fed bogus time value" errors that show up in the debug log on page views, do to User::getTouched() usage. Change-Id: I899d6edd2b59c02e618ed14f8d29dea53d866f05 --- diff --git a/includes/MWTimestamp.php b/includes/MWTimestamp.php index f2bd6ba569..d28f88e504 100644 --- a/includes/MWTimestamp.php +++ b/includes/MWTimestamp.php @@ -56,7 +56,7 @@ class MWTimestamp { * * @since 1.20 * - * @param bool|string $timestamp Timestamp to set, or false for current time + * @param bool|string|int|float $timestamp Timestamp to set, or false for current time */ public function __construct( $timestamp = false ) { $this->setTimestamp( $timestamp ); @@ -74,6 +74,7 @@ class MWTimestamp { * @throws TimestampException */ public function setTimestamp( $ts = false ) { + $m = array(); $da = array(); $strtime = ''; @@ -87,9 +88,9 @@ class MWTimestamp { # TS_EXIF } elseif ( preg_match( '/^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/D', $ts, $da ) ) { # TS_MW - } elseif ( preg_match( '/^-?\d{1,13}$/D', $ts ) ) { + } elseif ( preg_match( '/^(-?\d{1,13})(\.\d+)?$/D', $ts, $m ) ) { # TS_UNIX - $strtime = "@$ts"; // http://php.net/manual/en/datetime.formats.compound.php + $strtime = "@{$m[1]}"; // http://php.net/manual/en/datetime.formats.compound.php } elseif ( preg_match( '/^\d{2}-\d{2}-\d{4} \d{2}:\d{2}:\d{2}.\d{6}$/', $ts ) ) { # TS_ORACLE // session altered to DD-MM-YYYY HH24:MI:SS.FF6 $strtime = preg_replace( '/(\d\d)\.(\d\d)\.(\d\d)(\.(\d+))?/', "$1:$2:$3", diff --git a/tests/phpunit/includes/GlobalFunctions/wfTimestampTest.php b/tests/phpunit/includes/GlobalFunctions/wfTimestampTest.php index bea496c4f2..4ce51c6a27 100644 --- a/tests/phpunit/includes/GlobalFunctions/wfTimestampTest.php +++ b/tests/phpunit/includes/GlobalFunctions/wfTimestampTest.php @@ -21,6 +21,7 @@ class WfTimestampTest extends MediaWikiTestCase { array( -30281104, TS_MW, '19690115123456', 'Negative TS_UNIX to TS_MW' ), array( $t, TS_UNIX, 979562096, 'TS_UNIX to TS_UNIX' ), array( $t, TS_DB, '2001-01-15 12:34:56', 'TS_UNIX to TS_DB' ), + array( $t + .01, TS_MW, '20010115123456', 'TS_UNIX float to TS_MW' ), array( $t, TS_ISO_8601_BASIC, '20010115T123456Z', 'TS_ISO_8601_BASIC to TS_DB' ),