2016-08-11 4 views
0

Persavive V12 Db에서 데이터를 받았습니다. 날짜가 이상한 형식입니다. 그들은 플로트 같다 :Persavise db에서 float 형식의 날짜 형식

Example of date in table : 39787.0 

사람은 형식의이 종류를 알고 계십니까? 1901 년 1 월 1 일부터의 일수 인 것 같습니다.

날짜가 부동이므로 PHP에서 날짜의 요일을 추가 할 수 있습니까? 좋아요 :

$from = '1901-01-01'; 
$date = date('Y-m-d', strtotime($from .' +'. $float .' days')); 

나는 항상 1970-01-01입니다. 다른 방법이 있습니까?

+0

한 strtotime가 출력 첫날 추적 할 수없는 가망을 의미 유닉스 타임 스탬프는 solfware이 날짜를 쓰는 것을 01 01 1970인가? 어쩌면 날짜 형식이 무엇인지 검색 할 수 있습니다. –

+0

Pervasive 데이터베이스의 필드가 DDF에 Float로 표시되어 있습니까? 퍼베이시브 (Pervasive)는 수년간 날짜 필드를 가지고 있었고 플로트 (Float)가 아닙니다. . 귀하가 개발 한 응용 프로그램 또는 제 3 자의 응용 프로그램입니까? 앱의 공급 업체에 연락하여 날짜 형식을 확인 했습니까? – mirtheil

+0

불행히도 DB에 대한 액세스 권한이 없습니다. db의 데이터 만 받았지만 DDF는 없습니다. 필자는 Pervasive 서버 로컬에서 날짜 형식을 찾으려고 노력할 것입니다. –

답변

0

첫 번째 대답은 그렇게 많이 상처주지 않습니다. 당신이 무엇을하고 싶은지 잘 모르겠습니다. (데이터베이스에 다시 넣거나 추가 작업을 수행하여 하나의 솔루션 만 게시했습니다.)

게시 한 번호 39787.0은 유닉스 타임 스탬프입니다. mktime을 사용하여 원하는 번호로 변환해야합니다 (그리고 의 날짜는이어야합니다). mktime은 1901-01-01을 시작 날짜로 사용하기 때문에 몇 가지 변경을해야합니다.

나는 게으르다가 모든 필드에 대한 모든 코드를 포함하지 않았지만 원하는대로 추가하고 수정할 수 있도록해야합니다 (원하는 경우 한 줄로 정리할 수도 있음). 긴 형식으로 작성하여 쉽게 읽을 수 있습니다.

<? 

    $olddate = 39787.0; 
    $hour = 0; 
    $min = 0; 
    $sec = 0; 
    $month = 0; 
    $year = 0; 
    $day = 12; 
    $month += date("m",$olddate); 
    $day += date("d",$olddate); 
    $year += date("Y",$olddate); 
    $x = date("Ymd",mktime($hour,$min,$sec,$month,$day,$year)); 
    echo $x; 

    ?> 
+0

유닉스 타임 스탬프가 아닙니다. 이후 타임 스탬프는'1470943987'과 비슷합니다. 그리고 그랬다면 날짜 ('d-m-Y', $ timestamp)를 사용해야하고 mktime은 필요 없습니다. –

0

39787.0이 데이터베이스에있는 경우 응용 프로그램을 사용하여 실제 날짜의 값은 얼마입니까? 2008-12-05 일 경우 VB 날짜입니다. 응용 프로그램이 작성된 내용을 알고 있습니까? 사람들이 VB Date 데이터 형식을 사용하고 Btrieve (2003 년)에 8 바이트 부동 소수점으로 저장하는 것을 보았습니다. VB 날짜 인 경우 1은 1899-12-31입니다. 올바른 날짜 값을 얻으려면 1899-12-30에 번호를 추가 할 수 있어야합니다. 같은 뭔가 :

<?php 
$date = new DateTime('1899-12-30'); 
$date->add(new DateInterval('P39787D')); 
echo $date->format('Y-m-d') . "\n"; 
?>