<?php
-
/**
- * @file src/Util/DateTimeFormat.php
+ * @copyright Copyright (C) 2020, Friendica
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
*/
namespace Friendica\Util;
use Exception;
/**
- * @brief Temporal class
+ * Temporal class
*/
class DateTimeFormat
{
* @param string $time A date/time string
* @param string $format DateTime format string or Temporal constant
* @return string
+ * @throws Exception
*/
public static function utc($time, $format = self::MYSQL)
{
* @param string $time A date/time string
* @param string $format DateTime format string or Temporal constant
* @return string
+ * @throws Exception
*/
public static function local($time, $format = self::MYSQL)
{
/**
* convert() shorthand for timezoned now.
*
+ * @param $timezone
* @param string $format DateTime format string or Temporal constant
* @return string
+ * @throws Exception
*/
public static function timezoneNow($timezone, $format = self::MYSQL)
{
*
* @param string $format DateTime format string or Temporal constant
* @return string
+ * @throws Exception
*/
public static function localNow($format = self::MYSQL)
{
*
* @param string $format DateTime format string or Temporal constant
* @return string
+ * @throws Exception
*/
public static function utcNow($format = self::MYSQL)
{
}
/**
- * @brief General purpose date parse/convert/format function.
+ * General purpose date parse/convert/format function.
*
* @param string $s Some parseable date/time string
* @param string $tz_to Destination timezone
* @param string $tz_from Source timezone
* @param string $format Output format recognised from php's DateTime class
- * http://www.php.net/manual/en/datetime.format.php
+ * http://www.php.net/manual/en/datetime.format.php
*
* @return string Formatted date according to given format
+ * @throws Exception
*/
public static function convert($s = 'now', $tz_to = 'UTC', $tz_from = 'UTC', $format = self::MYSQL)
{
return $d->format($format);
}
+
+ /**
+ * Checks, if the given string is a date with the pattern YYYY-MM
+ *
+ * @param string $dateString The given date
+ *
+ * @return boolean True, if the date is a valid pattern
+ */
+ public function isYearMonth(string $dateString)
+ {
+ // Check format (2019-01, 2019-1, 2019-10)
+ if (!preg_match('/^([12]\d{3}-(1[0-2]|0[1-9]|\d))$/', $dateString)) {
+ return false;
+ }
+
+ $date = DateTime::createFromFormat('Y-m', $dateString);
+
+ if (!$date) {
+ return false;
+ }
+
+ try {
+ $now = new DateTime();
+ } catch (\Throwable $t) {
+ return false;
+ }
+
+ if ($date > $now) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Checks, if the given string is a date with the pattern YYYY-MM-DD
+ *
+ * @param string $dateString The given date
+ *
+ * @return boolean True, if the date is a valid pattern
+ */
+ public function isYearMonthDay(string $dateString)
+ {
+ $date = DateTime::createFromFormat('Y-m-d', $dateString);
+ if (!$date) {
+ return false;
+ }
+
+ if (DateTime::getLastErrors()['error_count'] || DateTime::getLastErrors()['warning_count']) {
+ return false;
+ }
+
+ return true;
+ }
}