【问题标题】:Compare two dates in string format以字符串格式比较两个日期
【发布时间】:2013-02-02 17:10:28
【问题描述】:

我可以比较像数字这样的字符串中的两个日期吗?还是我应该将它们重新输入整数?

这段代码可以吗?

<?php
$date1 = "20130102";
$date2 = "20151012";

if ($date1 < $date2){
    echo "date1 < date2";
} elseif ($date1 > $date2){
    echo "date1 > date2";
} else {
    echo "date1 = date2";
}
?>

【问题讨论】:

  • 当然它是安全的,但它可能不会给你正确的结果——你只是在比较字符串——看看strtotime
  • 其实它会给出正确的结果,只要日期的格式如图所示。不过同意strtotime,但也要检查更面向对象的DateTime 类:php.net/manual/en/class.datetime.php
  • 只要您的值按 yyyymmdd 顺序排列,它就会为您提供正确的结果。

标签: php string date compare


【解决方案1】:

您的代码在以下条件下是安全且正确的:如果您的日期格式类似于 Ymd(根据 php 的 date function

之所以有效,是因为在我可以想象的所有字符集中,字符 0-9 的排序与数字 0-9 的排序完全相同。如果你然后使用前导 0,你的字符串排序就像数字一样。

注意使用字符串作为日期的数据类型是一种代码味道。见this page(7号)

【讨论】:

  • @user1640032 如果我是你,我会在你测试之前验证这个事实。
  • @lonesomeday 在这种情况下你会怎么做:2013010420130301
  • 这些日期以 YYYYMMDD 格式存储在数据库中,因此已经过验证。
  • 到 lonesomeday:如果您的日期格式为 YYYYMMDD => 20130104
猜你喜欢
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
  • 2015-11-26
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-23
相关资源
最近更新 更多