javascript比较字符串(用于日期目的)

时间:2012-01-23 10:35:52

标签: php javascript

我之前只做过绝对比较,所以我对如何处理这个问题感到有些困惑......

我有两个从PHP返回的字符串(格式为DATE_ATOM,即2012-01-20)

我需要做的是将一个字符串(日期)与另一个字符串进行比较 - 但是,我需要在以下三个条件下返回true

  • 第一个日期与第二个日期匹配(==得到这个......)
  • 第一个日期与第二个日期+1天
  • 相匹配
  • 第一个日期与第二个日期+2天匹配

任何结果都会返回false。

我怎样才能以尽可能'干净'的方式做到这一点..

P.S这可以在PHP或Javascript中完成 - 只需要最干净的方式!

非常感谢提前!

5 个答案:

答案 0 :(得分:1)


$first = strtotime($yourFirstDate);
$second = strtotime($yourSecondData);
if($first == $second OR $first == strtotime($yourSecondDate, "+1 day") OR $first == strtotime($yourSecondDate, "+2 days")) {
   echo "ok with date";
}
else {
  echo "out of range";
}

答案 1 :(得分:0)

这是一个很简单的方法:

$datetime1 = new DateTime('2012-03-20');
$datetime2=new DateTime('2012-03-18');

$intervalo = $datetime1->diff($datetime2);
$diferencia=$intervalo->format('%R%d');

if($diferencia>=0 && $diferencia<=2)
{
echo "OK";
}

“%R”很重要,因为如果差异是负面或正面,我们只需要积极的,我已经看到了解决方案可以提供正确但负值也是如此。

答案 2 :(得分:0)

你可以在php.net上找到答案:

面向对象的风格

$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');

程序风格

$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%R%a days');

以上示例将输出:

+2 days

来源:http://www.php.net/manual/en/datetime.diff.php

答案 3 :(得分:0)

JavaScript的:

var day = 86400000;  // milliseconds (1000 * 60 * 60 * 24)

if ( Math.abs(new Date('2012-01-20') - new Date('2012-01-22')) <= 2 * day) {
  // dates are within 2 day of each other
}

请注意,版本8之前的IE不喜欢new Date('2012-01-20'),而是更喜欢new Date('2012/01/20')

答案 4 :(得分:0)

对于 javascript ,您可以这样做:

function compareDates(date1, date2)
{
    date1 = date1.split('-').join('');
    date2 = date1.split('-').join('');

    if (date1 == date2)        {return true;}
    if (date1 == (+date2) + 1) {return true;}
    if (date1 == (+date2) + 2) {return true;}

    return false;
}

console.log( compareDates('2012-01-20', '2012-01-20') ); // true
console.log( compareDates('2012-01-21', '2012-01-20') ); // true
console.log( compareDates('2012-01-22', '2012-01-20') ); // true
console.log( compareDates('2012-01-23', '2012-01-20') ); // false


编辑A
日期现在可以采用“2012-01-20T01:02:03 + 00:00”或“2012-01-20”格式,谢谢:) ..
我不知道用户将使用哪种格式

function compareDates(date1, date2)
{
    date1 = date1.substring(0,10).split('-').join('');
    date2 = date2.substring(0,10).split('-').join('');

    if (date1 == date2)        {return true;}
    if (date1 == (+date2) + 1) {return true;}
    if (date1 == (+date2) + 2) {return true;}

    return false;
}

console.log( compareDates('2012-01-20T01:02:03+00:00', '2012-01-20') ); // true
console.log( compareDates('2012-01-21', '2012-01-20') ); // true
console.log( compareDates('2012-01-22', '2012-01-20T01:02:03+00:00') ); // true
console.log( compareDates('2012-01-23T01:02:03+00:00', '2012-01-20T01:02:03+00:00') ); // false