package org.develnext.jphp.zend.ext.standard; import java.util.TimeZone; import java.util.Date; import php.runtime.Memory; import php.runtime.ext.support.compile.FunctionsContainer; import php.runtime.memory.ArrayMemory; import php.runtime.memory.DoubleMemory; import php.runtime.memory.LongMemory; import php.runtime.memory.StringMemory; public class DateFunctions extends FunctionsContainer { public static final int MSEC_IN_MIN = 60 * 1000; public static Memory microtime(boolean getAsFloat){ double now = System.currentTimeMillis() / 1000.0; int s = (int)now; return getAsFloat ? new DoubleMemory(now) : new StringMemory((Math.round((now - s) * 1000) / 1000) + " " + s); } public static Memory microtime(){ return microtime(false); } public static Memory gettimeofday(boolean getAsFloat){ long msec_time = System.currentTimeMillis(); if (getAsFloat) { double now = msec_time / 1000.0; return new DoubleMemory(now); } else { ArrayMemory result = new ArrayMemory(); TimeZone timeZone = TimeZone.getDefault(); long sec = msec_time / 1000; long usec = (msec_time % 1000) * 1000; long minuteswest = - timeZone.getOffset(msec_time) / MSEC_IN_MIN; boolean is_dst = timeZone.inDaylightTime(new Date(msec_time)); result.refOfIndex("sec").assign(sec); result.refOfIndex("usec").assign(usec); result.refOfIndex("minuteswest").assign(minuteswest); result.refOfIndex("dsttime").assign(is_dst ? 1 : 0); return result.toConstant(); } } public static Memory gettimeofday(){ return gettimeofday(false); } }