Я получил данные от Persavive V12 Db. Даты в странном формате.
Они как поплавок
Example of date in table : 39787.0
Кто-нибудь знает этот формат? Кажется, это число дней с 1901 по 01-01.
Поскольку даты являются плавающими, возможно ли добавить дни из даты в PHP? Подобно :
$from = '1901-01-01';
$date = date('Y-m-d', strtotime($from .' +'. $float .' days'));
У меня всегда 1970-01-01. Есть ли другой способ?
Мой первый ответ, так что не делай мне больно.
Я не совсем уверен, что вы хотите сделать (положить обратно в базу данных или выполнить дальнейшие операции, поэтому я опубликовал только одно решение)
Число, которое вы опубликовали 39787.0, является отметкой времени Unix. Вам нужно использовать указываете ей конвертировать то, что вы хотите в число (и вам нужно Дата преобразовать его в читаемую форму). Так как 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;
?>
Если 39787.0 находится в базе данных, какое значение это имеет в реальной дате (с помощью приложения)? Если это 2008-12-05, то это дата VB. Знаете ли вы, что приложение было написано? Я видел, как люди используют тип данных VB Date и хранят его в 8-байтовом буфере в Btrieve (еще в 2003 году). Если это дата 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";
?>