for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types = 1);
namespace AmmitPhp\Ammit\Domain;
class DateValidation
{
const FORMAT_SIMPLE = 'Y-m-d';
const FORMAT_RFC3339 = \DateTime::RFC3339;
/**
* Valid against Y-m-d format
* @param string $dateString String to validate
* @return bool
*/
public function isDateValid(string $dateString): bool
if (!$this->isValidDateAgainstRegex($dateString)) {
return false;
}
$date = $this->createDateFromString($dateString);
if (false === $date) {
if ($date->format(self::FORMAT_SIMPLE) === $dateString) {
if
return
return $date->format(sel...IMPLE) === $dateString;
return true;
public function isDateTimeValid(string $dateString): bool
if (!$this->isValidDateTimeAgainstRegex($dateString)) {
$date = $this->createDateTimeFromString($dateString);
if ($date->format(self::FORMAT_RFC3339) === $dateString) {
return $date->format(sel...C3339) === $dateString;
* @return \DateTime|false
public function createDateFromString(string $dateString)
return \DateTime::createFromFormat(self::FORMAT_SIMPLE, $dateString);
public function createDateTimeFromString(string $dateString)
return \DateTime::createFromFormat(self::FORMAT_RFC3339, $dateString);
private function isValidDateAgainstRegex($string): bool
if (preg_match('/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/',$string)) {
return (bool) preg_match...]|3[0-1])$/', $string);
private function isValidDateTimeAgainstRegex($string): bool
if (preg_match('/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T(0[0-9]|1[0-9]|2[0-3]):\d\d:\d\d\+\d\d:\d\d$/',$string)) {
return (bool) preg_match...\d:\\d\\d$/', $string);