문제

나는 뭔가의 라인을 따라..

$dt1 = '1000-01-01 00:00:00'; //really some val from db
$dt2 = '1000-01-01 00:00:10'; //another val maybe db maybe formatted

if(strtotime($dt1) > strtotime($dt2){
//do something
}

은 strtotime 필요합니까?을 할 수 있는 더 많은 직접 비교에 datetime 형식 문자열?

if($dt1 > $dt2){
//do something
}

저는 항상 작동하는가?

도움이 되었습니까?

해결책

Yes 사전 주문 의 문자열 형식 yyyy-mm-dd hh:ii:ss 으로 작동합니다.당신은 심지어는 종류 날짜와 같습니다.

$dts = array(
  '1000-01-01 00:00:00',
  '2010-03-16 21:22:19',
  '1000-01-01 00:00:10',
  '1976-03-27 05:55:00', 
  '1976-03-27 05:54:00',
  '1968-08-21 12:00:00',
  '2001-01-01 00:00:01'
);

sort($dts);
foreach($dts as $dt) {
  echo $dt, "\n";
}

인쇄

1000-01-01 00:00:00
1000-01-01 00:00:10
1968-08-21 12:00:00
1976-03-27 05:54:00
1976-03-27 05:55:00
2001-01-01 00:00:01
2010-03-16 21:22:19

그러나 유지 하는 마음에 당신을 얻을 수 없음에 대한 피드백 문자열 에서 올바른 형식을 만들 수 있습니다.그렇다면,그것은 이 있다는 잘못된 문자열 당신은 더 나은 확인 그것도 있습니다.하지 않은 경우 걱정 string1>string2 확인입니다.

편집:수도 MySQL 작업을 수행한다.는 경우 이것은 좋/동등/나쁜 일을 php 에 따라 당신은 실제로 노력하고 달성했다.E.g.

$pdo = new PDO("mysql:host=localhost;dbname=test", 'localonly', 'localonly'); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// setting up a sample table with some values
$pdo->exec('CREATE TEMPORARY TABLE foo (id int auto_increment, d datetime NOT NULL, primary key(id))');
$pdo->exec("INSERT INTO foo (d) VALUES ('1000-01-01 00:00:00'),('2010-03-16 21:22:19'),('1000-01-01 00:00:10'),('1976-03-27 05:55:00')");


$query = "
  SELECT
    d,
    (d>'1910-03-17 12:00:00') as flag
  FROM
    foo
";

foreach ( $pdo->query($query) as $row ) {
  echo $row['flag'] ? '+ ':'- ', $row['d'], "\n";
}

인쇄

- 1000-01-01 00:00:00
+ 2010-03-16 21:22:19
- 1000-01-01 00:00:10
+ 1976-03-27 05:55:00

다른 팁

날짜가 문자열에 저장된 경우 사용합니다 YYYY-MM-DD HH:MM:SS 형식, 당신은 그것을 사용할 수 있습니다 알파벳 순서 : 날짜 주문과 동일합니다.

이는 문자열에 대한 비교가 날짜 비교와 동일한 결과를 가져옵니다.


나는 사용하지 않는 데 이점이있을 것이라고 덧붙일 것이다. 유닉스 타임 스탬프 : 1970-01-01 이후 몇 초를 나타내는 32 비트 정수에 저장되므로 1970 년에서 2038 년까지의 범위로 제한됩니다. (시스템에 따라 범위가 더 넓지 만 무제한은 아닙니다)

나는 일반적으로 strtotime ()을 사용하여 날짜를 타임 스탬프 값으로 비교할 때 안전합니다.

하나의 명령문과 인쇄 '진술 1 true'와 다른 하나의 '진술 2 true'를 모두 작성하여 확인할 수 있습니다. 그런 다음 DT1과 DT2의 값을 변경하여 어떻게 진행되는지 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top