在数据库中,TIMESTAMP类型中有一列。从控制台用户可以使用以下格式之一输入日期:
TIMESTAMP(14) YYYYMMDDHHMMSS
TIMESTAMP(12) YYMMDDHHMMSS
TIMESTAMP(10) YYMMDDHHMM
TIMESTAMP(8) YYYYMMDD
TIMESTAMP(6) YYMMDD
TIMESTAMP(4) YYMM
TIMESTAMP(2) YY
正如mysql文档所说:所有元素都可以通过任何标点符号分开。
有没有办法验证php代码中的字符串变量是否符合mysql TIMESTAMP格式?
例
迁移:
$this->createTable('tweet',[
'id' => Schema::TYPE_PK,
'text' => Schema::TYPE_STRING.' NOT NULL',
'date_written' => Schema::TYPE_TIMESTAMP.' NOT NULL',
'date_imported' => Schema::TYPE_TIMESTAMP.' NOT NULL',
],"ENGINE=InnoDB DEFAULT CHARSET=utf8");
动作:
public function actionIndex()
{
$stdin = fopen("php://stdin", "r");
/**
* @var TweetShow $tweetShow
*/
$tweetShow = Yii::$app->get('tweetshow');
$tweetShow->showStatisticInformMessage();
$dateAndTime = fgets($stdin);
try {
strtotime($dateAndTime);
} catch (\Exception $e) {
echo "\033[01;31mНеверный формат даты!!!\n";
die();
}
从这里我想确定dateAndTime有mysql TIMESTAMP格式
/**
* @var TweetStatistic $tweetStatistic
*/
$tweetStatistic = Yii::$app->get('tweetstatistic');
$statistic = $tweetStatistic->getHashtagsStatisticByDate($dateAndTime);
$tweetShow->statisticByHashtags($statistic, $dateAndTime);
}
sttotime坏解决方案。用户可以输入任何可以在unix时间内解析的字符串。