php - PHP中解析格式不一致的日期

标签 php date time strtotime

我有两个查询,都与日期相关。

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/

相关文章:

php - Laravel 5.1 模型工厂种子错误

ios - 日期格式 - Swift

javascript - 从日期中添加/减去天数不会正确更改年/月

java - 根据区域设置格式化日期,然后获取日期部分

php - 如何使用 yii2 -bootstrap 扩展将模态添加到 yii2 中的导航栏?

php - "The active result contains no fields"将 PDO 与 MS SQL 结合使用

Android:使用 TextView 中显示的时间设置时间选择器

c++ - 使程序花费实际时间执行 C++

php - PHP更改了密码,无法正常工作。我相信语法没有错误,但是密码不会改变

javascript - 如何使用 javascript 创建包含当前时间和接下来 10 个五分钟间隔时间的数组?