MySQL DATETIME 형식으로 비교-은 strtotime 필요합니까?
-
20-09-2019 - |
문제
나는 뭔가의 라인을 따라..
$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의 값을 변경하여 어떻게 진행되는지 확인하십시오.