微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP区分只有日期或唯一时间以及两者

我在SO上搜索答案后乐观地发布了这个,即使SO告诉我我的问题可能会被关闭,我认为在这种情况下这是一个有效的问题.

考虑一个CSV文件,其中包含表示日期,时间或两者的字符串的列.我想在查看专栏后找出答案 – 这究竟是什么类型的专栏,而不仅仅是它是一个有效的“日期”?

PHP函数strtotime为几乎任何日期时间字符串返回一个unix时间戳做了一个了不起的工作.但是(今天我发布于10/8/2018),下午3:45和15:45:00以及10/8/2018 3:45 PM都将返回相同的unix时间,但显然前两个是时间.

确定字符串是严格的日期组件,时间组件还是两者兼而有之的方法是什么?

附:如果我必须自己编写一个函数,到目前为止最好的方法是在字符串中查找:这意味着有一个时间组件(意思是时间或日期时间).如果它解析为日期时间,但没有:存在,那么我们可以假设它只是一个日期.但同样,我想知道PHP是否有更优雅的方式.这是一个“非常好”的解决方案:

P.P.S这个功能实际上是一个“非常好”的解决方案,现在感谢@ 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';
}

解决方法:

您应该首先编写一组测试用例 – 您可以将其包含在您的问题中.有很多不同的方法来写日期和几种写时间的方法.

这里有一些让你入门:

日期

 2018-10-08
 08/10/2018
 10/08/2018
 08-10-2018
 10-08-2018
 10-Oct-2018
 20181008
 10 Oct 2018
 10th October 2018
 October, 10th 2018

 1121
 11:21
 11:21 AM
 11:21
 11:21:46
 11:21:46 AM

时区

 +00:00
 +0
 +0000
 Europe/London

然后,您拥有3个组件的所有可能组合:

date
date time
date time timezone
time
time timezone
time date
time timezone date

这提供了400种不同的格式(并非所有格式都是唯一可解析的格式).

(使用strtotime进行繁重的开始很有意义).但是,不是试图解析数据,而是寻找特定模式可能是一种更好的方法:是否有字母串? a或 – ?多少位数?连续多少位?

您仍应该从测试用例列表开始.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐