Was ist die Formel für die Berechnung der Zeitstempel?
Nur eine zufällige Frage, aber kennt jemand die Formel, wie man einen timestamp berechnet? Ich vermute, es hat zu prüfen, jeden Monat und wie viele Tage, Schaltjahre, usw.
Wenn Sie interessiert sind bei der Umsetzung ist hier in etwa wie Windows-timestamp berechnet werden können (auch bekannt als Zecken):
public static Int64 GetTimeStamp(
int year, int month, int day,
int hour, int minute, int second, int milliseconds)
{
Int64 timestamp = DateToTicks(year, month, day)
+ TimeToTicks(hour, minute, second);
return timestamp + milliseconds * TicksInMillisecond;
}
static readonly int[] DaysToMonth365 =
new int[] { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
static readonly int[] DaysToMonth366 =
new int[] { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 };
const long TicksInSecond = TicksInMillisecond * 1000L;
const long TicksInMillisecond = 10000L;
public static bool IsLeapYear(int year)
{
if ((year < 1) || (year > 9999))
throw new ArgumentOutOfRangeException("year", "Bad year.");
if ((year % 4) != 0)
return false;
if ((year % 100) == 0)
return ((year % 400) == 0);
return true;
}
private static long DateToTicks(int year, int month, int day)
{
if (((year >= 1) && (year <= 9999)) && ((month >= 1) && (month <= 12)))
{
int[] daysToMonth = IsLeapYear(year) ? DaysToMonth366 : DaysToMonth365;
if ((day >= 1) && (day <= (daysToMonth[month] - daysToMonth[month - 1])))
{
int previousYear = year - 1;
int daysInPreviousYears = ((((previousYear * 365) + (previousYear /4)) - (previousYear /100)) + (previousYear /400));
int totalDays = ((daysInPreviousYears + daysToMonth[month - 1]) + day) - 1;
return (totalDays * 0xc92a69c000L);
}
}
throw new ArgumentOutOfRangeException();
}
private static long TimeToTicks(int hour, int minute, int second)
{
long totalSeconds = ((hour * 3600L) + (minute * 60L)) + second;
if ((totalSeconds > 0xd6bf94d5e5L) || (totalSeconds < -922337203685L))
throw new ArgumentOutOfRangeException();
return (totalSeconds * TicksInSecond);
}
Ich bin zu wollen, um diese zu schreiben in PHP.
PHP ist time und gmmktime Funktion liefert den Unix-Zeitstempel. Wenn Sie möchten, können Sie es konvertieren, um Zecken als 621355968000000000 + unixTimestamp * 10000000
was ist 0xd6bf94d5e5L, 0xc92a69c000L und 922337203685L?
Hier ist ein Beispiel, wie Unix-timestamp berechnet sich aus der wikipedia-Artikel:
Die Unix-Zeit die Anzahl ist null an der
Unix-Epoche, und steigt genau
86 400 pro Tag seit Beginn der Epoche zurück. So
2004-09-16T00:00:00Z, 12 677 Tagen
nach der Epoche wird vertreten durch den
Unix-Zeit, Nummer 12, 677 × 86 400 = 1
095 292 800. Diese Frist kann verlängert werden
rückwärts aus der Epoche zu, mit
negative zahlen; so
1957-10-04T00:00:00Z, 4 472 Tagen
vor Beginn der Epoche wird vertreten durch
die Unix-Zeit die Anzahl -4 472 × 86 400 =
-386 380 800.
In der Regel ist es die verstrichene Zeit seit einem bestimmten Datum. Im Falle der unix-Zeit, es ist die Zeit, die verstrichen ist, seit Jan 1, 1970 in Sekunden.
Wenn Sie interessiert sind bei der Umsetzung ist hier in etwa wie Windows-timestamp berechnet werden können (auch bekannt als Zecken):
time
undgmmktime
Funktion liefert den Unix-Zeitstempel. Wenn Sie möchten, können Sie es konvertieren, um Zecken als621355968000000000 + unixTimestamp * 10000000
Hier ist ein Beispiel, wie Unix-timestamp berechnet sich aus der wikipedia-Artikel:
In der Regel ist es die verstrichene Zeit seit einem bestimmten Datum. Im Falle der unix-Zeit, es ist die Zeit, die verstrichen ist, seit Jan 1, 1970 in Sekunden.