Skip to content

Commit

Permalink
datetime functions use 'long'
Browse files Browse the repository at this point in the history
  • Loading branch information
jakubmisek committed Mar 14, 2017
1 parent 741298b commit a0155a8
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 48 deletions.
2 changes: 1 addition & 1 deletion src/Peachpie.Library/DateTime/DateTime.cs
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ public virtual int getOffset()
return this;
}

public virtual int getTimestamp()
public virtual long getTimestamp()
{
return DateTimeUtils.UtcToUnixTimeStamp(Time);
}
Expand Down
75 changes: 38 additions & 37 deletions src/Peachpie.Library/DateTime/DateTimeFunctions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ public static string date(Context ctx, string format)
/// <param name="format">Format definition for output.</param>
/// <param name="timestamp">Nuber of seconds since 1970 specifying a date.</param>
/// <returns>Formatted string.</returns>
public static string date(Context ctx, string format, int timestamp)
public static string date(Context ctx, string format, long timestamp)
{
return FormatDate(format, DateTimeUtils.UnixTimeStampToUtc(timestamp), PhpTimeZone.GetCurrentTimeZone(ctx));
}
Expand All @@ -148,7 +148,7 @@ public static string gmdate(string format)
/// <param name="format">Format definition for output.</param>
/// <param name="timestamp">Nuber of seconds since 1970 specifying a date.</param>
/// <returns>Formatted string.</returns>
public static string gmdate(string format, int timestamp)
public static string gmdate(string format, long timestamp)
{
return FormatDate(format, DateTimeUtils.UnixTimeStampToUtc(timestamp), DateTimeUtils.UtcTimeZone);
}
Expand All @@ -159,7 +159,7 @@ public static string gmdate(string format, int timestamp)
/// <param name="ctx">Current runtime context.</param>
/// <param name="format">Format definition for output.</param>
/// <returns>Part of the date, e.g. month or hours.</returns>
public static int idate(Context ctx, string format)
public static long idate(Context ctx, string format)
{
if (format == null || format.Length != 1)
//PhpException.InvalidArgument("format");
Expand All @@ -175,7 +175,7 @@ public static int idate(Context ctx, string format)
/// <param name="format">Format definition for output.</param>
/// <param name="timestamp">Nuber of seconds since 1970 specifying a date.</param>
/// <returns>Part of the date, e.g. month or hours.</returns>
public static int idate(Context ctx, string format, int timestamp)
public static long idate(Context ctx, string format, long timestamp)
{
if (format == null || format.Length != 1)
//PhpException.InvalidArgument("format");
Expand All @@ -184,7 +184,7 @@ public static int idate(Context ctx, string format, int timestamp)
return GetDatePart(format[0], DateTimeUtils.UnixTimeStampToUtc(timestamp), PhpTimeZone.GetCurrentTimeZone(ctx));
}

private static int GetDatePart(char format, System_DateTime utc, TimeZoneInfo/*!*/ zone)
private static long GetDatePart(char format, System_DateTime utc, TimeZoneInfo/*!*/ zone)
{
var local = TimeZoneInfo.ConvertTime(utc, zone);// zone.ToLocalTime(utc);

Expand Down Expand Up @@ -257,7 +257,7 @@ private static int GetDatePart(char format, System_DateTime utc, TimeZoneInfo/*!
return local.DayOfYear - 1;

case 'Z':
return (int)zone.GetUtcOffset(local).TotalSeconds;
return (long)zone.GetUtcOffset(local).TotalSeconds;

default:
//PhpException.InvalidArgument("format");
Expand Down Expand Up @@ -553,8 +553,8 @@ static void GetIsoWeekAndYear(System_DateTime dt, out int week, out int year)

static int GetSwatchBeat(System_DateTime utc)
{
int seconds = DateTimeUtils.UtcToUnixTimeStamp(utc);
int beat = (int)(((seconds - (seconds - ((seconds % 86400) + 3600))) * 10) / 864) % 1000;
var seconds = DateTimeUtils.UtcToUnixTimeStamp(utc);
var beat = (int)(((seconds - (seconds - ((seconds % 86400) + 3600))) * 10) / 864) % 1000;
return (beat < 0) ? beat + 1000 : beat;
}

Expand Down Expand Up @@ -598,7 +598,7 @@ public static string strftime(Context ctx, string format)
/// <param name="format">Format of the string.</param>
/// <param name="timestamp">Number of seconds since 1970 representing the time to format.</param>
/// <returns>Formatted string representing date and time.</returns>
public static string strftime(Context ctx, string format, int timestamp)
public static string strftime(Context ctx, string format, long timestamp)
{
return FormatTime(ctx, format, DateTimeUtils.UnixTimeStampToUtc(timestamp), PhpTimeZone.GetCurrentTimeZone(ctx));
}
Expand All @@ -621,13 +621,13 @@ public static string gmstrftime(Context ctx, string format)
/// <param name="format">Format of the string.</param>
/// <param name="timestamp">Number of seconds since 1970 representing the time to format.</param>
/// <returns>Formatted string representing date and time.</returns>
public static string gmstrftime(Context ctx, string format, int timestamp)
public static string gmstrftime(Context ctx, string format, long timestamp)
{
return FormatTime(ctx, format, DateTimeUtils.UnixTimeStampToUtc(timestamp), DateTimeUtils.UtcTimeZone);
}

/// <summary>
/// Implementation of <see cref="FormatTime(string,int)"/> function.
/// Implementation of <see cref="gmstrftime(Context, string, long)"/> function.
/// </summary>
private static string FormatTime(Context ctx, string format, System.DateTime utc, TimeZoneInfo/*!*/ zone)
{
Expand Down Expand Up @@ -866,49 +866,49 @@ private static string FormatTime(Context ctx, string format, System.DateTime utc

#region gmmktime

public static int gmmktime()
public static long gmmktime()
{
var utc_now = System.DateTime.UtcNow;
return gmmktime(utc_now.Hour, utc_now.Minute, utc_now.Second, utc_now.Month, utc_now.Day, utc_now.Year);
}

public static int gmmktime(int hour)
public static long gmmktime(int hour)
{
var utc_now = System.DateTime.UtcNow;
return gmmktime(hour, utc_now.Minute, utc_now.Second, utc_now.Month, utc_now.Day, utc_now.Year);
}

public static int gmmktime(int hour, int minute)
public static long gmmktime(int hour, int minute)
{
var utc_now = System.DateTime.UtcNow;
return gmmktime(hour, minute, utc_now.Second, utc_now.Month, utc_now.Day, utc_now.Year);
}

public static int gmmktime(int hour, int minute, int second)
public static long gmmktime(int hour, int minute, int second)
{
var utc_now = System.DateTime.UtcNow;
return gmmktime(hour, minute, second, utc_now.Month, utc_now.Day, utc_now.Year);
}

public static int gmmktime(int hour, int minute, int second, int month)
public static long gmmktime(int hour, int minute, int second, int month)
{
var utc_now = System.DateTime.UtcNow;
return gmmktime(hour, minute, second, month, utc_now.Day, utc_now.Year);
}

public static int gmmktime(int hour, int minute, int second, int month, int day)
public static long gmmktime(int hour, int minute, int second, int month, int day)
{
var utc_now = System.DateTime.UtcNow;
return gmmktime(hour, minute, second, month, day, utc_now.Year);
}

public static int gmmktime(int hour, int minute, int second, int month, int day, int year, int dummy)
public static long gmmktime(int hour, int minute, int second, int month, int day, int year, int dummy)
{
// According to PHP manual daylight savings time parameter ignored
return gmmktime(hour, minute, second, month, day, year);
}

public static int gmmktime(int hour, int minute, int second, int month, int day, int year)
public static long gmmktime(int hour, int minute, int second, int month, int day, int year)
{
return DateTimeUtils.UtcToUnixTimeStamp(MakeDateTime(hour, minute, second, month, day, year));
}
Expand All @@ -922,7 +922,7 @@ public static int gmmktime(int hour, int minute, int second, int month, int day,
/// </summary>
/// <param name="ctx">Runtime context.</param>
/// <returns>Unix timestamp.</returns>
public static int mktime(Context ctx)
public static long mktime(Context ctx)
{
var now = GetNow(ctx);
return mktime(ctx, now.Hour, now.Minute, now.Second, now.Month, now.Day, now.Year, -1);
Expand All @@ -935,7 +935,7 @@ public static int mktime(Context ctx)
/// <param name="ctx">Runtime context.</param>
/// <param name="hour">The hour.</param>
/// <returns>Unix timestamp.</returns>
public static int mktime(Context ctx, int hour)
public static long mktime(Context ctx, int hour)
{
var now = GetNow(ctx);
return mktime(ctx, hour, now.Minute, now.Second, now.Month, now.Day, now.Year, -1);
Expand All @@ -949,7 +949,7 @@ public static int mktime(Context ctx, int hour)
/// <param name="hour">The hour.</param>
/// <param name="minute">The minute.</param>
/// <returns>Unix timestamp.</returns>
public static int mktime(Context ctx, int hour, int minute)
public static long mktime(Context ctx, int hour, int minute)
{
var now = GetNow(ctx);
return mktime(ctx, hour, minute, now.Second, now.Month, now.Day, now.Year, -1);
Expand All @@ -964,7 +964,7 @@ public static int mktime(Context ctx, int hour, int minute)
/// <param name="minute">The minute.</param>
/// <param name="second">The second.</param>
/// <returns>Unix timestamp.</returns>
public static int mktime(Context ctx, int hour, int minute, int second)
public static long mktime(Context ctx, int hour, int minute, int second)
{
var now = GetNow(ctx);
return mktime(ctx, hour, minute, second, now.Month, now.Day, now.Year, -1);
Expand All @@ -980,7 +980,7 @@ public static int mktime(Context ctx, int hour, int minute, int second)
/// <param name="second">The second.</param>
/// <param name="month">The month.</param>
/// <returns>Unix timestamp.</returns>
public static int mktime(Context ctx, int hour, int minute, int second, int month)
public static long mktime(Context ctx, int hour, int minute, int second, int month)
{
var now = GetNow(ctx);
return mktime(ctx, hour, minute, second, month, now.Day, now.Year, -1);
Expand All @@ -997,7 +997,7 @@ public static int mktime(Context ctx, int hour, int minute, int second, int mont
/// <param name="month">The month.</param>
/// <param name="day">The day.</param>
/// <returns>Unix timestamp.</returns>
public static int mktime(Context ctx, int hour, int minute, int second, int month, int day)
public static long mktime(Context ctx, int hour, int minute, int second, int month, int day)
{
var now = GetNow(ctx);
return mktime(ctx, hour, minute, second, month, day, now.Year, -1);
Expand All @@ -1014,7 +1014,7 @@ public static int mktime(Context ctx, int hour, int minute, int second, int mont
/// <param name="day">The day.</param>
/// <param name="year">The year.</param>
/// <returns>Unix timestamp.</returns>
public static int mktime(Context ctx, int hour, int minute, int second, int month, int day, int year)
public static long mktime(Context ctx, int hour, int minute, int second, int month, int day, int year)
{
return mktime(ctx, hour, minute, second, month, day, year, -1);
}
Expand All @@ -1031,7 +1031,7 @@ public static int mktime(Context ctx, int hour, int minute, int second, int mont
/// <param name="year">The year.</param>
/// <param name="daylightSaving">Daylight savings time.</param>
/// <returns>Unix timestamp.</returns>
public static int mktime(Context ctx, int hour, int minute, int second, int month, int day, int year, int daylightSaving)
public static long mktime(Context ctx, int hour, int minute, int second, int month, int day, int year, int daylightSaving)
{
var zone = PhpTimeZone.GetCurrentTimeZone(ctx);
var local = MakeDateTime(hour, minute, second, month, day, year);
Expand Down Expand Up @@ -1170,7 +1170,7 @@ public static PhpArray getdate(Context ctx)
/// <param name="ctx">Current runtime context.</param>
/// <param name="timestamp">Number of seconds since 1970.</param>
/// <returns>Associative array with date information.</returns>
public static PhpArray getdate(Context ctx, int timestamp)
public static PhpArray getdate(Context ctx, long timestamp)
{
return GetDate(ctx, DateTimeUtils.UnixTimeStampToUtc(timestamp));
}
Expand Down Expand Up @@ -1307,7 +1307,7 @@ public static PhpArray localtime(Context ctx)
/// <param name="timestamp"></param>
/// <param name="returnAssociative"></param>
/// <returns></returns>
public static PhpArray localtime(Context ctx, int timestamp, bool returnAssociative = false)
public static PhpArray localtime(Context ctx, long timestamp, bool returnAssociative = false)
{
return GetLocalTime(PhpTimeZone.GetCurrentTimeZone(ctx), DateTimeUtils.UnixTimeStampToUtc(timestamp), returnAssociative);
}
Expand Down Expand Up @@ -1394,7 +1394,7 @@ public static PhpValue microtime(bool returnDouble)
/// <param name="ctx">Runtime context.</param>
/// <param name="time">String containing time definition</param>
/// <returns>Number of seconds since 1/1/1970 or -1 on failure.</returns>
public static int strtotime(Context ctx, string time)
public static long strtotime(Context ctx, string time)
{
return StringToTime(ctx, time, System_DateTime.UtcNow);
}
Expand All @@ -1406,22 +1406,22 @@ public static int strtotime(Context ctx, string time)
/// <param name="time">String containing time definition.</param>
/// <param name="start">Timestamp (seconds from 1970) to which is the new timestamp counted.</param>
/// <returns>Number of seconds since 1/1/1970 or -1 on failure.</returns>
public static int strtotime(Context ctx, string time, int start)
public static long strtotime(Context ctx, string time, long start)
{
return StringToTime(ctx, time, DateTimeUtils.UnixTimeStampToUtc(start));
}

/// <summary>
/// Implementation of <see cref="StringToTime(string,int)"/> function.
/// </summary>
static int StringToTime(Context ctx, string time, System_DateTime startUtc)
static long StringToTime(Context ctx, string time, System_DateTime startUtc)
{
if (time == null) return -1;
time = time.Trim();
if (time.Length == 0) return -1;

string error = null;
int result = DateInfo.Parse(ctx, time, startUtc, out error);
var result = DateInfo.Parse(ctx, time, startUtc, out error);
if (error != null)
{
PhpException.Throw(PhpError.Warning, error);
Expand All @@ -1439,7 +1439,7 @@ static int StringToTime(Context ctx, string time, System_DateTime startUtc)
/// Returns the current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT).
/// </summary>
/// <returns>Number of seconds since 1970.</returns>
public static int time()
public static long time()
{
return DateTimeUtils.UtcToUnixTimeStamp(System_DateTime.UtcNow);
}
Expand All @@ -1452,24 +1452,25 @@ public static int time()
public const int SUNFUNCS_RET_STRING = (int)TimeFormats.String;
public const int SUNFUNCS_RET_DOUBLE = (int)TimeFormats.Double;

[PhpHidden]
public enum TimeFormats
{
Integer = 0,
String = 1,
Double = 2
}

public static PhpValue date_sunrise(Context ctx, int timestamp, TimeFormats format = TimeFormats.String, double latitude = double.NaN, double longitude = double.NaN, double zenith = double.NaN, double offset = double.NaN)
public static PhpValue date_sunrise(Context ctx, long timestamp, TimeFormats format = TimeFormats.String, double latitude = double.NaN, double longitude = double.NaN, double zenith = double.NaN, double offset = double.NaN)
{
return GetSunTime(ctx, timestamp, format, latitude, longitude, zenith, offset, true);
}

public static PhpValue date_sunset(Context ctx, int timestamp, TimeFormats format = TimeFormats.String, double latitude = double.NaN, double longitude = double.NaN, double zenith = double.NaN, double offset = double.NaN)
public static PhpValue date_sunset(Context ctx, long timestamp, TimeFormats format = TimeFormats.String, double latitude = double.NaN, double longitude = double.NaN, double zenith = double.NaN, double offset = double.NaN)
{
return GetSunTime(ctx, timestamp, format, latitude, longitude, zenith, offset, false);
}

static PhpValue GetSunTime(Context ctx, int timestamp, TimeFormats format, double latitude, double longitude, double zenith, double offset, bool getSunrise)
static PhpValue GetSunTime(Context ctx, long timestamp, TimeFormats format, double latitude, double longitude, double zenith, double offset, bool getSunrise)
{
var zone = PhpTimeZone.GetCurrentTimeZone(ctx);
var utc = DateTimeUtils.UnixTimeStampToUtc(timestamp);
Expand Down
4 changes: 2 additions & 2 deletions src/Peachpie.Library/DateTime/DateTimeParsing.cs
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ public struct Relative

#region Parse

public static int Parse(Context ctx, string/*!*/ str, System.DateTime utcStart, out string error)
public static long Parse(Context ctx, string/*!*/ str, System.DateTime utcStart, out string error)
{
Debug.Assert(str != null);

Expand All @@ -139,7 +139,7 @@ public static int Parse(Context ctx, string/*!*/ str, System.DateTime utcStart,

#region GetUnixTimeStamp

private int GetUnixTimeStamp(Context ctx, System.DateTime utcStart, out string error)
private long GetUnixTimeStamp(Context ctx, System.DateTime utcStart, out string error)
{
var zone = PhpTimeZone.GetCurrentTimeZone(ctx);
var start = TimeZoneInfo.ConvertTime(utcStart, TimeZoneInfo.Utc, zone);// zone.ToLocalTime(utcStart);
Expand Down
4 changes: 2 additions & 2 deletions src/Peachpie.Library/Utils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -403,14 +403,14 @@ internal static class DateTimeUtils
/// </summary>
/// <param name="dt">Time.</param>
/// <returns>Unix timestamp.</returns>
internal static int UtcToUnixTimeStamp(System_DateTime dt) => Core.Utilities.DateTimeUtils.UtcToUnixTimeStamp(dt);
internal static long UtcToUnixTimeStamp(System_DateTime dt) => Core.Utilities.DateTimeUtils.UtcToUnixTimeStamp(dt);

/// <summary>
/// Converts UNIX timestamp (number of seconds from 1.1.1970) to <see cref="System_DateTime"/>.
/// </summary>
/// <param name="timestamp">UNIX timestamp</param>
/// <returns><see cref="System_DateTime"/> structure representing UTC time.</returns>
internal static System_DateTime UnixTimeStampToUtc(int timestamp)
internal static System_DateTime UnixTimeStampToUtc(long timestamp)
{
return UtcStartOfUnixEpoch + TimeSpan.FromSeconds(timestamp);
}
Expand Down

0 comments on commit a0155a8

Please sign in to comment.