Я публикую это оптимистично после поиска ответа здесь на SO, и даже когда SO говорит мне, что мой вопрос может быть закрыт, так как я думаю, что в этом случае это правильный вопрос.
Рассмотрим файл CSVсо столбцом, содержащим строку, представляющую либо даты, либо время, либо оба.Я хочу выяснить после просмотра столбца, просто - точно какой это тип столбца, а не только то, что это действительная "дата"?
функция PHP strtotime делает потрясающую работу по возвращению метки времени Unix практически для любой строки date-time-ish.Но (сегодня, когда я выкладываю это 8/8/2018), 3:45PM
и 15:45:00
и 10/8/2018 3:45PM
будут возвращать одно и то же время Unix, хотя, очевидно, первые два раза.
Как определить, является ли строка строго компонентом даты, компонентом времени или и тем и другим?
PS Если бы мне пришлось писать функцию самостоятельно, пока наилучшим отрывом было быискать в строке :
, что означало бы наличие компонента времени (означающего либо время, либо дату / время).Если он анализируется как дата и время, но без :
, то мы можем предположить, что это только дата.Но опять же, мне интересно, есть ли у PHP более элегантный способ.Вот «довольно хорошее» решение:
PPS эта функция на самом деле является «очень хорошим» решением благодаря умному предложению @ KarstenKoop в комментариях о втором параметре для strtotime
:
function date_time_component($date){
if(strtotime($date) === false) return false;
if(strtotime($date, 86400) !== strtotime($date, 86400 * 2)) return 'time';
if(strstr($date, ':')) return 'datetime';
return 'date';
}