TypedValue* HHVM_FN(strtotime)(ActRec* ar) { GET_ARGS_AND_CALL(ar, strtotimeImpl); }
String{getArgStrict<KindOfString>(ar, 0)}, \ getArgStrict<KindOfInt64>(ar, 1, TimeStamp::Current()))); \ } catch (const IncoercibleArgumentException& e) { \ return arReturn(ar, false); \ } \ static Variant dateImpl(const String& format, int64_t timestamp) { if (format.empty()) return empty_string_variant(); auto dt = req::make<DateTime>(timestamp, false); String ret = dt->toString(format, false); if (ret.isNull()) return false; return ret; } TypedValue* HHVM_FN(date)(ActRec* ar) { GET_ARGS_AND_CALL(ar, dateImpl) } static Variant gmdateImpl(const String& format, int64_t timestamp) { auto dt = req::make<DateTime>(timestamp, true); String ret = dt->toString(format, false); if (ret.isNull()) return false; return ret; } TypedValue* HHVM_FN(gmdate)(ActRec* ar) { GET_ARGS_AND_CALL(ar, gmdateImpl) } static Variant strftimeImpl(const String& format, int64_t timestamp) { auto dt = req::make<DateTime>(timestamp, false);
int64_t ret = DateTime(timestamp, false).toInteger(*format.data()); if (ret == -1) return false; return ret; } #define GET_ARGS_AND_CALL(ar, func) \ try { \ return arReturn(ar, func( \ getArgStrict<KindOfString>(ar, 0), \ getArgStrict<KindOfInt64>(ar, 1, TimeStamp::Current()))); \ } catch (const IncoercibleArgumentException& e) { \ return arReturn(ar, false); \ } \ TypedValue* HHVM_FN(idate)(ActRec* ar) { GET_ARGS_AND_CALL(ar, idateImpl) } static Variant dateImpl(const String& format, int64_t timestamp) { if (format.empty()) return empty_string_variant(); String ret = DateTime(timestamp, false).toString(format, false); if (ret.isNull()) return false; return ret; } TypedValue* HHVM_FN(date)(ActRec* ar) { GET_ARGS_AND_CALL(ar, dateImpl) } static Variant gmdateImpl(const String& format, int64_t timestamp) { String ret = DateTime(timestamp, true).toString(format, false);