Update in DateTime, Uids, support
DateTime::dateStringFormat Add new flag after show microtime to add microtime with . as a float type instead of string with ms Uids creation with alder32 and ripedm160 for 8 and 40 char long uids Support class with new method getCallerMethodList to return an array of all methods and not only one point reference
This commit is contained in:
@@ -25,26 +25,43 @@ final class CoreLibsCombinedDateTimeTest extends TestCase
|
|||||||
'valid timestamp no microtime' => [
|
'valid timestamp no microtime' => [
|
||||||
1641515890,
|
1641515890,
|
||||||
false,
|
false,
|
||||||
|
false,
|
||||||
'2022-01-07 09:38:10',
|
'2022-01-07 09:38:10',
|
||||||
],
|
],
|
||||||
'valid timestamp with microtime' => [
|
'valid timestamp with microtime' => [
|
||||||
1641515890,
|
1641515890,
|
||||||
true,
|
true,
|
||||||
|
false,
|
||||||
|
'2022-01-07 09:38:10',
|
||||||
|
],
|
||||||
|
'valid timestamp with microtime float' => [
|
||||||
|
1641515890,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
'2022-01-07 09:38:10',
|
'2022-01-07 09:38:10',
|
||||||
],
|
],
|
||||||
'valid micro timestamp with microtime' => [
|
'valid micro timestamp with microtime' => [
|
||||||
1641515890.123456,
|
1641515890.123456,
|
||||||
true,
|
true,
|
||||||
|
false,
|
||||||
'2022-01-07 09:38:10 1235ms',
|
'2022-01-07 09:38:10 1235ms',
|
||||||
],
|
],
|
||||||
|
'valid micro timestamp with microtime float' => [
|
||||||
|
1641515890.123456,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
'2022-01-07 09:38:10.1235',
|
||||||
|
],
|
||||||
'valid micro timestamp no microtime' => [
|
'valid micro timestamp no microtime' => [
|
||||||
1641515890.123456,
|
1641515890.123456,
|
||||||
false,
|
false,
|
||||||
|
false,
|
||||||
'2022-01-07 09:38:10',
|
'2022-01-07 09:38:10',
|
||||||
],
|
],
|
||||||
'invalid timestamp' => [
|
'invalid timestamp' => [
|
||||||
-123123,
|
-123123,
|
||||||
false,
|
false,
|
||||||
|
false,
|
||||||
'1969-12-30 22:47:57',
|
'1969-12-30 22:47:57',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
@@ -454,11 +471,19 @@ final class CoreLibsCombinedDateTimeTest extends TestCase
|
|||||||
* @param string $expected
|
* @param string $expected
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function testDateStringFormat($input, bool $flag, string $expected): void
|
public function testDateStringFormat(
|
||||||
{
|
$input,
|
||||||
|
bool $flag_show_micro,
|
||||||
|
bool $flag_micro_as_float,
|
||||||
|
string $expected
|
||||||
|
): void {
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$expected,
|
$expected,
|
||||||
\CoreLibs\Combined\DateTime::dateStringFormat($input, $flag)
|
\CoreLibs\Combined\DateTime::dateStringFormat(
|
||||||
|
$input,
|
||||||
|
$flag_show_micro,
|
||||||
|
$flag_micro_as_float
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,15 @@ final class CoreLibsCreateUidsTest extends TestCase
|
|||||||
0 => 'sha256',
|
0 => 'sha256',
|
||||||
1 => 64
|
1 => 64
|
||||||
],
|
],
|
||||||
'default hash DEFAULT_HASH not set' => [
|
'ripemd160 hash' => [
|
||||||
|
0 => 'ripemd160',
|
||||||
|
1 => 40
|
||||||
|
],
|
||||||
|
'adler32 hash' => [
|
||||||
|
0 => 'adler32',
|
||||||
|
1 => 8
|
||||||
|
],
|
||||||
|
'default hash not set' => [
|
||||||
0 => null,
|
0 => null,
|
||||||
1 => 64,
|
1 => 64,
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -62,6 +62,11 @@ final class CoreLibsDebugSupportTest extends TestCase
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Undocumented function
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
public function printToStringProvider(): array
|
public function printToStringProvider(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
@@ -246,6 +251,24 @@ final class CoreLibsDebugSupportTest extends TestCase
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Undocumented function
|
||||||
|
*
|
||||||
|
* @cover ::getCallerMethodList
|
||||||
|
* @testWith [["main", "run", "run", "run", "run", "run", "run", "runBare", "runTest", "testGetCallerMethodList"]]
|
||||||
|
* @testdox getCallerMethodList check if it returns $expected [$_dataName]
|
||||||
|
*
|
||||||
|
* @param array $expected
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testGetCallerMethodList(array $expected): void
|
||||||
|
{
|
||||||
|
$this->assertEquals(
|
||||||
|
$expected,
|
||||||
|
\CoreLibs\Debug\Support::getCallerMethodList()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Undocumented function
|
* Undocumented function
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -74,8 +74,9 @@ $timestamps = [
|
|||||||
-1622788315.456789
|
-1622788315.456789
|
||||||
];
|
];
|
||||||
foreach ($timestamps as $timestamp) {
|
foreach ($timestamps as $timestamp) {
|
||||||
print "DATESTRINGFORMAT(sm:0): $timestamp: " . DateTime::dateStringFormat($timestamp) . "<br>";
|
print "DATESTRINGFORMAT(sm:0:0): $timestamp: " . DateTime::dateStringFormat($timestamp) . "<br>";
|
||||||
print "DATESTRINGFORMAT(sm:1): $timestamp: " . DateTime::dateStringFormat($timestamp, true) . "<br>";
|
print "DATESTRINGFORMAT(sm:1:0): $timestamp: " . DateTime::dateStringFormat($timestamp, true) . "<br>";
|
||||||
|
print "DATESTRINGFORMAT(sm:1:1): $timestamp: " . DateTime::dateStringFormat($timestamp, true, true) . "<br>";
|
||||||
}
|
}
|
||||||
$intervals = [
|
$intervals = [
|
||||||
788315.123456,
|
788315.123456,
|
||||||
|
|||||||
@@ -54,8 +54,14 @@ function test()
|
|||||||
return DebugSupport::getCallerMethod(1);
|
return DebugSupport::getCallerMethod(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function test2()
|
||||||
|
{
|
||||||
|
return DebugSupport::getCallerMethodList(1);
|
||||||
|
}
|
||||||
|
|
||||||
print "S::GETCALLERMETHOD: " . DebugSupport::getCallerMethod(0) . "<br>";
|
print "S::GETCALLERMETHOD: " . DebugSupport::getCallerMethod(0) . "<br>";
|
||||||
print "S::GETCALLERMETHOD: " . test() . "<br>";
|
print "S::GETCALLERMETHOD: " . test() . "<br>";
|
||||||
|
print "S::GETCALLERMETHODLIST: <pre>" . print_r(test2(), true) . "</pre><br>";
|
||||||
print "S::PRINTAR: " . DebugSupport::printAr(['Foo', 'Bar']) . "<br>";
|
print "S::PRINTAR: " . DebugSupport::printAr(['Foo', 'Bar']) . "<br>";
|
||||||
print "V-S::PRINTAR: " . $debug_support_class::printAr(['Foo', 'Bar']) . "<br>";
|
print "V-S::PRINTAR: " . $debug_support_class::printAr(['Foo', 'Bar']) . "<br>";
|
||||||
print "S::DEBUSTRING(s): " . DebugSupport::debugString('SET') . "<br>";
|
print "S::DEBUSTRING(s): " . DebugSupport::debugString('SET') . "<br>";
|
||||||
|
|||||||
@@ -15,18 +15,26 @@ class DateTime
|
|||||||
/**
|
/**
|
||||||
* a simple wrapper for the date format
|
* a simple wrapper for the date format
|
||||||
* if an invalid timestamp is give zero timestamp unix time is used
|
* if an invalid timestamp is give zero timestamp unix time is used
|
||||||
* @param int|float $timestamp unix timestamp
|
* @param int|float $timestamp unix timestamp
|
||||||
* @param bool $show_micro show the micro time (default false)
|
* @param bool $show_micro show the micro time (default false)
|
||||||
* @return string formated date+time in Y-M-D h:m:s ms
|
* @param bool $micro_as_float Add the micro time with . instead of ms (default false)
|
||||||
|
* @return string formated date+time in Y-M-D h:m:s ms
|
||||||
*/
|
*/
|
||||||
public static function dateStringFormat($timestamp, bool $show_micro = false): string
|
public static function dateStringFormat(
|
||||||
{
|
$timestamp,
|
||||||
|
bool $show_micro = false,
|
||||||
|
bool $micro_as_float = false
|
||||||
|
): string {
|
||||||
// split up the timestamp, assume . in timestamp
|
// split up the timestamp, assume . in timestamp
|
||||||
// array pad $ms if no microtime
|
// array pad $ms if no microtime
|
||||||
list ($timestamp, $ms) = array_pad(explode('.', (string)round($timestamp, 4)), 2, null);
|
list ($timestamp, $ms) = array_pad(explode('.', (string)round($timestamp, 4)), 2, null);
|
||||||
$string = date("Y-m-d H:i:s", (int)$timestamp);
|
$string = date("Y-m-d H:i:s", (int)$timestamp);
|
||||||
if ($show_micro && $ms) {
|
if ($show_micro && $ms) {
|
||||||
$string .= ' ' . $ms . 'ms';
|
if ($micro_as_float == false) {
|
||||||
|
$string .= ' ' . $ms . 'ms';
|
||||||
|
} else {
|
||||||
|
$string .= '.' . $ms;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return $string;
|
return $string;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ namespace CoreLibs\Create;
|
|||||||
class Uids
|
class Uids
|
||||||
{
|
{
|
||||||
// what to use as a default hash if non ise set and no DEFAULT_HASH is defined
|
// what to use as a default hash if non ise set and no DEFAULT_HASH is defined
|
||||||
private const FALLBACK_HASH = 'sha256';
|
public const FALLBACK_HASH = 'sha256';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* creates psuedo random uuid v4
|
* creates psuedo random uuid v4
|
||||||
@@ -56,15 +56,15 @@ class Uids
|
|||||||
case 'sha256':
|
case 'sha256':
|
||||||
$uniq_id = hash('sha256', uniqid((string)rand(), true));
|
$uniq_id = hash('sha256', uniqid((string)rand(), true));
|
||||||
break;
|
break;
|
||||||
|
case 'ripemd160':
|
||||||
|
$uniq_id = hash('ripemd160', uniqid((string)rand(), true));
|
||||||
|
break;
|
||||||
|
case 'adler32':
|
||||||
|
$uniq_id = hash('adler32', uniqid((string)rand(), true));
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
// fallback to this hash type
|
// fallback to this hash type
|
||||||
$hash = self::FALLBACK_HASH;
|
$hash = self::FALLBACK_HASH;
|
||||||
if (
|
|
||||||
defined('DEFAULT_HASH') &&
|
|
||||||
in_array(DEFAULT_HASH, hash_algos())
|
|
||||||
) {
|
|
||||||
$hash = DEFAULT_HASH;
|
|
||||||
}
|
|
||||||
$uniq_id = hash($hash, uniqid((string)rand(), true));
|
$uniq_id = hash($hash, uniqid((string)rand(), true));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,6 +90,29 @@ class Support
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns array with all methods in the call stack in the order so that last
|
||||||
|
* called is last in order
|
||||||
|
* Will start with start_level to skip unwanted from stack
|
||||||
|
* Defaults to skip level 0 wich is this methid
|
||||||
|
* @param integer $start_level From what level on, as defaul starts with 1
|
||||||
|
* to exclude self
|
||||||
|
* @return array All method names in list where max is last called
|
||||||
|
*/
|
||||||
|
public static function getCallerMethodList(int $start_level = 1): array
|
||||||
|
{
|
||||||
|
$traces = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
|
||||||
|
$methods = [];
|
||||||
|
foreach ($traces as $level => $data) {
|
||||||
|
if ($level >= $start_level) {
|
||||||
|
if (!empty($data['function'])) {
|
||||||
|
array_unshift($methods, $data['function']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $methods;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the current class where this function is called
|
* Get the current class where this function is called
|
||||||
* Is mostly used in debug log statements to get the class where the debug
|
* Is mostly used in debug log statements to get the class where the debug
|
||||||
|
|||||||
Reference in New Issue
Block a user