我有两个查询,都与日期相关。
1)我有这些格式的日期,我希望在保存到数据库之前将其标准化为相同的格式:
- 7 月 26 日星期六
- 7 月 28 日星期一至 30 日星期三
- 2014 年 7 月 24 日
- 9 月 4 日星期四
- 8 月 28 日星期四 - 9 月 19 日星期五
- 2014年7月24日
使用 strtotime()
计算单日非常容易,但日期范围则有点棘手。
例如,这不起作用:
$dateString = "Monday 28 - Wednesday 30 July";
if (strpos($dateString, "-")) {
$datePieces = explode("-", $dateString);
$startDate = strtotime($datePieces[0]);
$endDate = strtotime($datePieces[1]);
} else {
$startDate = strtotime($dateString);
$endDate = strtotime($dateString);
}
echo '<pre>';
echo date('d F Y', $startDate);
echo '<br/>';
echo date('d F Y', $endDate);
因为月份仅位于 explode()
的一侧,所以这样做会返回:
01 January 1970
30 July 2014
2)我需要一种方法来计算出日期是哪一年(它总是在未来)。大致如下:
if (the month in the date string has elapsed) {
the year of the date is this year + 1
}
最佳答案
只要每个来源为您提供一致的格式,您就可以使用 DateTime()
和DateTime::createFromFormat()
为您处理日期。
//Saturday 26 July
$date = DateTime::createFromFormat('l j F', 'Saturday 26 July');
//July 24th, 2014
$date = new DateTime('July 24th, 2014');
//Thu 4 Sep
$date = DateTime::createFromFormat('D j M', 'Thu 4 Sep');
//Thu 28 Aug — Fri 19 Sep
list($start, $end) = explode(' - ', 'Thu 28 Aug — Fri 19 Sep');
$start = DateTime::createFromFormat('D j M', $start);
$end = DateTime::createFromFormat('D j M', $end);
//24-07-2014
$date = new DateTime('24-07-2014');
我要离开处理Monday 28 - Wednesday 30 July
因为您需要做更多的工作才能从第二个日期获取月份并将其应用于第一个日期。但这应该向您展示如何解决这个问题。
关于php - PHP中解析格式不一致的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24936411/