Я создаю функцию timestamp() окна, и я получил неправильную проверку чисел функцией PHP microtime():
В этом параграфе C++ принят код:
#include <windows.h>
#include <iostream> // <--- Console I/O
#include <cstdlib> // <--- Command Line
#include <sstream>
using namespace std;
void print(string value){cout << value;}
string parseStr(int value)
{
ostringstream stream;
stream<<value<<flush;
return stream.str();
}
// ============================================================
// TIMESTAMP
// ============================================================
string timestamp()
{
SYSTEMTIME system_time;
GetLocalTime(&system_time);
int year = system_time.wYear;
int month = system_time.wMonth;
int day = system_time.wDay;
int hour = system_time.wHour;
int minute = system_time.wMinute;
int second = system_time.wSecond;
int milliseconds = system_time.wMilliseconds;
int day_of_year = 0;
if (month > 1){day_of_year += 31;} // Sausis
if (month > 2){day_of_year += 28;} // Vasaris
if (month > 3){day_of_year += 31;} // Kovas
if (month > 4){day_of_year += 30;} // Balandis
if (month > 5){day_of_year += 31;} // Geguze
if (month > 6){day_of_year += 30;} // Birzelis
if (month > 7){day_of_year += 31;} // Liepa
if (month > 8){day_of_year += 31;} // Rugpjutis
if (month > 9){day_of_year += 30;} // Rugsejis
if (month > 10){day_of_year += 31;} // Spalis
if (month > 11){day_of_year += 30;} // Lapkritis
if (month > 12){day_of_year += 31;} // Gruodis
day_of_year += day;
int time = 0;
time += (year - 1970) * 31536000;
time += day_of_year * 86400;
time += hour * 3600;
time += minute * 60;
time += second;
string time_string;
time_string = parseStr(time);
return time_string;
}
// ============================================================
int main()
{
while(true)
{
system("cls");
string time = timestamp();
print(time);
Sleep(100);
}
return 0;
}
Я вычисляю что-то неправильно или что-то неправильно с целыми типами? :(
Ошибка здесь:
time += (year - 1970) * 31536000;
31536000
- это количество секунд в 365 дней. Но с 1970 года было 11 високосных дней, в эти годы 366 дней. Вы должны добавить 86400
для каждого из високосных дней.
Разница между двумя вашими результатами - 853192. Это немного меньше 10 дней, поэтому я не уверен, что произошло с 11-м височным днем. Это также 3 часа меньше, чем 10 дней (+ 8 секунд, что, я думаю, это время между двумя вашими испытаниями); что поскольку временные метки Unix основаны на GMT, а не на местном времени.
Вместо того, чтобы перематывать свою собственную метку времени, вы использовали бы эту работу:
time_t epochtime = time(NULL);
переменная эпоха должна содержать количество секунд с начала 1970 года.
Ваш код не учитывает високосные годы, что, вероятно, влияет на ваши вычисления и PHP.
month_of_year > 12
? Когда месяц может быть больше 12?