'Error', E_WARNING => 'Warning', E_PARSE => 'Parsing Error', E_NOTICE => 'Notice', E_CORE_ERROR => 'Core Error', E_CORE_WARNING => 'Core Warning', E_COMPILE_ERROR => 'Compile Error', E_COMPILE_WARNING => 'Compile Warning', E_USER_ERROR => 'User Error', E_USER_WARNING => 'User Warning', E_USER_NOTICE => 'User Notice', E_STRICT => 'Runtime Notice' ); $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE); $filename = str_replace("\\", '/', $filename); $dt = date('Y-m-d H:i:s'); $err = "#####" . $dt . "\n"; $err .= "```" . "\n"; $err .= "datetime :" . $dt . "\n"; $err .= "errornum :" . $errno . "\n"; $err .= "errormsg :" . $errortype[$errno] . "\n"; $err .= "errortype :" . $errmsg . "\n"; $err .= "scriptname :" . $filename . "\n"; if (in_array($errno, $user_errors)) { $err .= "scriptname :" . wddx_serialize_value($vars, "Variables") . "\n"; } $err .= "scriptlinenum:" . $linenum . "\n"; $err .= "```\n"; $logDir = PROJECT_PATH . DS . 'Storage' . DS . 'Logs' . DS . 'SysError' . DS; $logFile = $logDir . date('m-d') . '.md'; if (!is_dir($logDir)) { @mkdir($logDir); } @error_log($err, 3, $logFile); @chmod($logFile, 0777); } function shutdown_function() { $e = error_get_last(); if (isset($e['type'])) { if (in_array($e['type'], array(E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR))) { php_error_log($e['type'], $e['message'], $e['file'], $e['line'], NULL); } } } if (defined('LOG_ERROR') && LOG_ERROR) { register_shutdown_function('shutdown_function'); } function isMobile($mobile) { return preg_match('#^13[\d]{9}$|^14[5,7]{1}\d{8}$|^15[^4]{1}\d{8}$|^16[\d]{9}$|^17[0,6,7,8,3,5]{1}\d{8}$|^18[\d]{9}$|^19[\d]{9}$#', $mobile) ? true : false; } /**电子邮箱格式校验*/ function isEmail($email) { $pattern = "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i"; return preg_match_all($pattern, $email) ? true : false; } /** * 利用curl模拟浏览器发送请求 * * @param string $url 请求的URL * @param array|string $post post数据 * @param int $timeout 执行超时时间 * @param boolean $sendcookie 是否发送当前cookie * @param array $options 可选的CURL参数 * @return array */ function request($url, $post = null, $timeout = 40, $sendcookie = true, $options = array(), $ssl = false, $sslDate = array(), $useragent = false, $proxy = false, $http_build_query = true) { if (empty($useragent)) { if (isset($_SERVER['HTTP_USER_AGENT'])) { $useragent = $_SERVER['HTTP_USER_AGENT']; } else { $useragent = 'internalloginuseragent'; } } if ($proxy) { $ip_long = array( array('607649792', '608174079'), //36.56.0.0-36.63.255.255 array('1038614528', '1039007743'), //61.232.0.0-61.237.255.255 array('1783627776', '1784676351'), //106.80.0.0-106.95.255.255 array('2035023872', '2035154943'), //121.76.0.0-121.77.255.255 array('2078801920', '2079064063'), //123.232.0.0-123.235.255.255 array('-1950089216', '-1948778497'), //139.196.0.0-139.215.255.255 array('-1425539072', '-1425014785'), //171.8.0.0-171.15.255.255 array('-1236271104', '-1235419137'), //182.80.0.0-182.92.255.255 array('-770113536', '-768606209'), //210.25.0.0-210.47.255.255 array('-569376768', '-564133889'), //222.16.0.0-222.95.255.255 ); $rand_key = mt_rand(0, 9); $ip = long2ip(mt_rand($ip_long[$rand_key][0], $ip_long[$rand_key][1]));//随机生成国内某个ip $result = getNewProxyId(); if ($result['error'] != '') { echo $result['error']; } else { $rand_ip = $result['ip']; } $baseHeader = array( "CLIENT-IP:{$ip}", "X-FORWARDED-FOR:{$ip}", ); if (isset($options[CURLOPT_HTTPHEADER])) { $options[CURLOPT_HTTPHEADER] = array_merge($options[CURLOPT_HTTPHEADER], $baseHeader); } } $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_USERAGENT, $useragent); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 35); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout ? $timeout : 40); if (defined('CURLOPT_IPRESOLVE') && defined('CURL_IPRESOLVE_V4')) { curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); } if ($sendcookie) { $cookie = ''; foreach ($_COOKIE as $key => $val) { $cookie .= rawurlencode($key) . '=' . rawurlencode($val) . ';'; } curl_setopt($ch, CURLOPT_COOKIE, $cookie); } if ($post) { curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, (is_array($post) && $http_build_query) ? http_build_query($post) : $post); } if (!ini_get('safe_mode') && ini_get('open_basedir') == '') { curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); } curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); //检查证书中是否设置域名且是否与提供的主机名匹配 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); //是否只信任CA颁发的证书 curl_setopt($ch, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1 if ($ssl) { /*curl_setopt($ch, CURLOPT_SSLCERT, '/apps/jindouyun/Public/upload/apiclient_cert.pem'); curl_setopt($ch, CURLOPT_SSLKEY, '/apps/jindouyun/Public/upload/apiclient_key.pem');*/ curl_setopt($ch, CURLOPT_SSLCERT, $sslDate['cert']); curl_setopt($ch, CURLOPT_SSLKEY, $sslDate['key']); } foreach ($options as $key => $value) { curl_setopt($ch, $key, $value); } if ($proxy && isset($rand_ip)) { curl_setopt($ch, CURLOPT_PROXY, 'http://' . $rand_ip); } $ret = curl_exec($ch); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $content_length = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD); if (!$content_length) $content_length = curl_getinfo($ch, CURLINFO_SIZE_DOWNLOAD); $info = curl_getinfo($ch); $content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); $errorMsg = curl_error($ch); curl_close($ch); return array( 'httpcode' => $httpcode, 'info' => $info, 'errorMsg' => $errorMsg, 'content_length' => $content_length, 'content_type' => $content_type, 'content' => $ret ); } /** * 获取最新的代理ip * 代理测试工具 http://proxies.site-digger.com/proxy-test/ **/ function getNewProxyId() { //$url = 'http://webapi.http.zhimacangku.com/getip?num=1&type=2&pro=&city=0&yys=0&port=1&time=1&ts=1&ys=1&cs=1&lb=1&sb=0&pb=4&mr=1®ions='; $url = 'http://http.tiqu.qingjuhe.cn/getip?num=1&type=2&pack=35299&port=1&lb=1&pb=4®ions='; $data = request($url); if ($data['httpcode'] == 200) { $content = json_decode($data['content'], true); if ($content['success'] == 'true') { foreach ($content['data'] as $key => $value) { $rand_ip = $value['ip'] . ':' . $value['port']; } } else { $errorMessage = '获取代理ip失败' . $content['code'] . $content['msg'] . PHP_EOL; } } if (isset($rand_ip)) { return [ 'ip' => $rand_ip, 'error' => '', ]; } else { return [ 'ip' => '', 'error' => $errorMessage, ]; } } /** * 获取当前毫秒时间戳 */ function msectime() { list($msec, $sec) = explode(' ', microtime()); return (int)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000); } /** * 断点调试输出方法 * * @param mixed $msg 输出的内容 * * @return string */ function V($msg) { echo "
"; var_export($msg); exit(); } /** * 校验日期格式是否正确 * * @param string $date 日期 * @param array $formats 需要检验的格式数组 * * @return bool|int */ function checkDateIsValid($date, $formats = ["Y-m-d", "Y/m/d", "Y-m-d H:i:s", "Y/m/d H:i:s"]) { $unixTime = strtotime($date); if (!$unixTime) { return false; } foreach ($formats as $format) { if (date($format, $unixTime) == $date) { return $unixTime; } } return false; } /** * 二维数组根据某个字段排序 * * @param array $needArray 需要排序的二维数组 * @param string $field 根据的字段排序 * @param array $sort 排序规则ASC 升序 | DESC 降序 * * @return array; */ function arrayMultiSort(array $needArray, $field, $sort = 'ASC') { $rule = []; $arrSort = []; $sort = strtoupper($sort); $rule['direction'] = 'SORT_' . $sort; $rule['field'] = $field; foreach ($needArray AS $uniqid => $row) { foreach ($row AS $key => $value) { $arrSort[$key][$uniqid] = $value; } } if ($rule['direction']) { array_multisort($arrSort[$rule['field']], constant($rule['direction']), $needArray); } return $needArray; } /** * 利用firephp输出调试到header * * 需要安装: * firefox:FireBug | chrome:FirePHP for Chrome * * @param mixed $message 要输出的信息 * @param bool $showtime 是否显示执行时间 */ function console($message, $showtime = false) { static $lasttime = TIME; static $_getInstance; $thistime = microtime(true); $usedtime = $thistime - $lasttime; $lasttime = $thistime; $label = $showtime ? sprintf("%09.5fs", $usedtime) : NULL; if (is_null($_getInstance)) { $_getInstance = \Mall\Framework\Core\FirePHP::getInstance(true); } $_getInstance->info($message, $label); } /** * 检测数组的值不允许为空 * * @param array $params 需要检测的数组 * @param array $checkKey 需要检测的key默认全部检测 * @param array $excludeKey 过虑不检测的Key * * @return string */ function checkNotEmpty($params, $excludeKey = [], $checkKey = []) { $newParams = []; if ($checkKey && is_array($checkKey)) { foreach ($checkKey as $key) { if (isset($params[$key])) { $newParams[$key] = $params[$key]; } } } if ($newParams) { $params = $newParams; } if (is_array($params)) { foreach ($params as $k => $v) { if (in_array($k, $excludeKey, true)) { continue; } if (is_array($v)) { checkNotEmpty($v); } if (empty($v)) { return $k . ' 不允许为空'; } } } } /** * 友好格式化时间 * @param int $timestamp 时间 * @param array $formats * @return string */ function formatDateTime($timestamp, $formats = null) { if ($formats == null) { $formats = array( 'DAY' => '%s天前', 'DAY_HOUR' => '%s天%s小时前', 'HOUR' => '%s小时', 'HOUR_MINUTE' => '%s小时%s分前', 'MINUTE' => '%s分钟前', 'MINUTE_SECOND' => '%s分钟%s秒前', 'SECOND' => '%s秒前', ); } /* 计算出时间差 */ $seconds = time() - $timestamp; $minutes = floor($seconds / 60); $hours = floor($minutes / 60); $days = floor($hours / 24); if ($days > 0 && $days < 31) { $diffFormat = 'DAY'; } elseif ($days == 0) { $diffFormat = ($hours > 0) ? 'HOUR' : 'MINUTE'; if ($diffFormat == 'HOUR') { $diffFormat .= ($minutes > 0 && ($minutes - $hours * 60) > 0) ? '_MINUTE' : ''; } else { $diffFormat = (($seconds - $minutes * 60) > 0 && $minutes > 0) ? $diffFormat . '_SECOND' : 'SECOND'; } } else { $diffFormat = 'TURE_DATE_TIME';//超出30天, 正常时间显示 } $dateDiff = null; switch ($diffFormat) { case 'DAY': $dateDiff = sprintf($formats[$diffFormat], $days); break; case 'DAY_HOUR': $dateDiff = sprintf($formats[$diffFormat], $days, $hours - $days * 60); break; case 'HOUR': $dateDiff = sprintf($formats[$diffFormat], $hours); break; case 'HOUR_MINUTE': $dateDiff = sprintf($formats[$diffFormat], $hours, $minutes - $hours * 60); break; case 'MINUTE': $dateDiff = sprintf($formats[$diffFormat], $minutes); break; case 'MINUTE_SECOND': $dateDiff = sprintf($formats[$diffFormat], $minutes, $seconds - $minutes * 60); break; case 'SECOND': $dateDiff = sprintf($formats[$diffFormat], $seconds); break; default: $dateDiff = date('Y-m-d H:i:s',$timestamp); } return $dateDiff; } /** * 数组交叉排序并合并 * * @param array $needo * @param array $needt * * @return array */ function sortCross(array $needo = [], array $needt = []) { $newData = []; $needoCount = count($needo); $needtCount = count($needt); $size = $needoCount > $needtCount ? $needoCount : $needtCount; for ($i = 0; $i < $size; $i++) { if (isset($needo[$i])) { array_push($newData, $needo[$i]); } if (isset($needt[$i])) { array_push($newData, $needt[$i]); } } return $newData; } /** * 二维数组去重 * * @param $list * @param $key * * @return array */ function assocUnique($list, $key) { $arr = array(); for ($i = 0; $i < count($list); $i++) { if (isset($list[$i][$key])) { if (!isset($arr[$list[$i][$key]])) { $arr[$list[$i][$key]] = $list[$i]; } } } return array_values($arr); } /** * 为相对路径的缩略图加绝对地址 * * @param string|array $thumbs 图片集合 * @param string $key 图片地址的Key * * @return array */ function absoluteImg($thumbs, $key = '') { if ($thumbs) { if (is_array($thumbs)) { foreach ($thumbs as &$t) { if ($key) { $value = $t[$key]; } else { $value = $t; } if (!$value) { continue; } if (!filter_var($value, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED)) { if ($key) { $t[$key] = URL_UPLOAD . $value; } else { $t = URL_UPLOAD . $value; } } } } if (is_string($thumbs)) { if (!filter_var($thumbs, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED)) { $thumbs = URL_UPLOAD . $thumbs; } } } return $thumbs; } /** * 对内容字段进行 int 整形转换 * * @param array $params * * @return array */ function contentIntValFormat(array $params) { $intVal = [ 'id', 'appid', 'has_thumb', 'catid', 'created', 'createdby', 'published', 'publishedby', 'modified', 'modifiedby', 'digg', 'pv', 'virtual_pv', 'status', 'indexid', 'contentid', 'pagecount', 'weight', 'commend', 'noexpiration', 'commend_pv', 'iscount' ]; foreach ($params as $k => $param) { if (in_array($k, $intVal, true)) { $params[$k] = intval($param); } } return $params; } /** * 根据用户年月日算出星座 * * @param string $dob 出生年月 1990-12-18 * * @return string */ function constellation($dob) { $dob = date("m-d", strtotime($dob)); list($month, $day) = explode("-", $dob); $constellation = ''; if (($month == 3 || $month == 4) && ($day > 22 || $day < 21)) { $constellation = "Aries"; } else if (($month == 4 || $month == 5) && ($day > 22 || $day < 22)) { $constellation = "Taurus"; } else if (($month == 5 || $month == 6) && ($day > 23 || $day < 22)) { $constellation = "Gemini"; } else if (($month == 6 || $month == 7) && ($day > 23 || $day < 23)) { $constellation = "Cancer"; } else if (($month == 7 || $month == 8) && ($day > 24 || $day < 22)) { $constellation = "Leo"; } else if (($month == 8 || $month == 9) && ($day > 23 || $day < 24)) { $constellation = "Virgo"; } elseif (($month == 9 || $month == 10) && ($day > 25 || $day < 24)) { $constellation = "Libra"; } else if (($month == 10 || $month == 11) && ($day > 25 || $day < 23)) { $constellation = "Scorpio"; } else if (($month == 11 || $month == 12) && ($day > 24 || $day < 23)) { $constellation = "Sagittarius"; } else if (($month == 12 || $month == 1) && ($day > 24 || $day < 21)) { $constellation = "Cpricorn"; } else if (($month == 1 || $month == 2) && ($day > 22 || $day < 20)) { $constellation = "Aquarius"; } else if (($month == 2 || $month == 3) && ($day > 21 || $day < 21)) { $constellation = "Pisces"; } return $constellation; } /** * 随机生成短信验证码 * @param int $length 验证码长度 * @return int */ function generate_code($length = 6) { return rand(pow(10, ($length - 1)), pow(10, $length) - 1); } /** * 计算两点地理坐标之间的距离 * @param string $longitude1 起点经度 * @param string $latitude1 起点纬度 * @param string $longitude2 终点经度 * @param string $latitude2 终点纬度 * @param int $unit 单位 1:米 2:公里 * @param int $decimal 精度 保留小数位数 * @return string */ function getDistance($longitude1, $latitude1, $longitude2, $latitude2, $unit = 2, $decimal = 2) { $EARTH_RADIUS = 6370.996; // 地球半径系数 $PI = 3.1415926; $radLat1 = $latitude1 * $PI / 180.0; $radLat2 = $latitude2 * $PI / 180.0; $radLng1 = $longitude1 * $PI / 180.0; $radLng2 = $longitude2 * $PI / 180.0; $a = $radLat1 - $radLat2; $b = $radLng1 - $radLng2; $distance = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))); $distance = $distance * $EARTH_RADIUS * 1000; if ($unit == 2) { $distance = $distance / 1000; } return round($distance, $decimal); } /** * @param int $month 月份 * @param int $year 年 * * @return mixed */ function getMonthBeginToEnd($month, $year = 0) { $beginDate = 0; $endDate = 0; if ($month = intval($month)) { if (!$year) { $year = date('Y', time()); } $beginDate = strtotime("{$year}-{$month}-01"); $endDate = strtotime(date('Y-m-t', $beginDate)); } return [ 'beginTime' => $beginDate, 'endTime' => $endDate ]; } /** * 格式化商品价格 * * @access public * @param float $price 商品价格 * @return string */ function priceFormat($price) { return number_format($price, 2, '.', ''); } /** * 数组转xml内容 * * @param array $arr 数组 * @return string */ function arrayToXml($arr) { $xml = ''; foreach ($arr as $key => $value) { if (is_string($value)) { $xml .= '<' . $key . '>' . $key . '>'; } else { $xml .= '<' . $key . '>' . $value . '' . $key . '>'; } } return $xml; } //数组转xml function arrayToWeiXinXml($arr) { $xml = ''; foreach($arr as $key => $value){ if (is_string($value)) { $xml .= '<' . $key . '>' . $key . '>'; } else { $xml .= '<' . $key . '>' . $value . '' . $key . '>'; } } $xml .=' '; return $xml; } /** * xml转json格式数据 * * @param string $xml xml格式文件内容 * @return string */ function XML2JSON($xml) { function normalizeSimpleXML($obj, &$result) { $data = $obj; if (is_object($data)) { $data = get_object_vars($data); } if (is_array($data)) { foreach ($data as $key => $value) { $res = null; normalizeSimpleXML($value, $res); if (($key == '@attributes') && ($key)) { $result = $res; } else { $result[$key] = $res; } } } else { $result = $data; } } normalizeSimpleXML(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA), $result); return json_encode($result, JSON_UNESCAPED_UNICODE); } /** * 分页方法 */ function pageToOffset($page = 1, $pageSize = 10) { return [ 'limit' => $pageSize, 'offset' => ($page - 1) * $pageSize, ]; } /** * PHP截取UTF-8字符串,解决半字符问题。 * 英文、数字(半角)为1字节(8位),中文(全角)为2字节 * 取出的字符串, 当$len小于等于0时, 会返回整个字符串 * @param string $str 源字符串 * @param int $len 左边的子串的长度 */ function utf_substr($str, $len) { $new_str = []; for ($i = 0; $i < $len; $i++) { $temp_str = substr($str, 0, 1); if (ord($temp_str) > 127) { if ($i < $len) { $new_str[] = substr($str, 0, 3); $str = substr($str, 3); } } else { $new_str[] = substr($str, 0, 1); $str = substr($str, 1); } } return join($new_str); } function isCardNo($vStr) { $vCity = array( '11', '12', '13', '14', '15', '21', '22', '23', '31', '32', '33', '34', '35', '36', '37', '41', '42', '43', '44', '45', '46', '50', '51', '52', '53', '54', '61', '62', '63', '64', '65', '71', '81', '82', '91' ); if (!preg_match('/^([\d]{17}[xX\d]|[\d]{15})$/', $vStr)) return false; if (!in_array(substr($vStr, 0, 2), $vCity)) return false; $vStr = preg_replace('/[xX]$/i', 'a', $vStr); $vLength = strlen($vStr); if ($vLength == 18) { $vBirthday = substr($vStr, 6, 4) . '-' . substr($vStr, 10, 2) . '-' . substr($vStr, 12, 2); } else { $vBirthday = '19' . substr($vStr, 6, 2) . '-' . substr($vStr, 8, 2) . '-' . substr($vStr, 10, 2); } if (date('Y-m-d', strtotime($vBirthday)) != $vBirthday) return false; if ($vLength == 18) { $vSum = 0; for ($i = 17; $i >= 0; $i--) { $vSubStr = substr($vStr, 17 - $i, 1); $vSum += (pow(2, $i) % 11) * (($vSubStr == 'a') ? 10 : intval($vSubStr, 11)); } if ($vSum % 11 != 1) return false; } return true; } /** * try_catch 统一写入日志方法 * @param object $logger Factory::logs * @param $exception 捕获的异常内容 */ function catchError($logger, $exception) { $error = '错误类型:' . get_class($exception) . PHP_EOL; $error .= '错误代码:' . $exception->getCode() . PHP_EOL; $error .= '错误信息:' . $exception->getMessage() . PHP_EOL; $error .= '错误堆栈:' . $exception->getTraceAsString() . PHP_EOL; $logger && $logger->log($error, 'error'); } /** * 资金元单位转化为分单位 * @param float 元 * @return int 分 */ function yuanToFen($yuan) { $fen = strval($yuan * 100); return intval($fen); } /** * 资金分单位转化为元单位 * @param int 分 * @return float 元 */ function fenToYuan($fen) { $fen = $fen / 100; return $fen; } /** * 千克转为克 * @param string|float * @return int */ function kgTog($kg) { $g = strval($kg * 1000); return $g = intval($g); } /** * 克转为千克 * @param string|float * @return int */ function gToKg($kg) { $kg = $kg / 1000; return $kg; } /** * 元/千克 转为 分/克 并保留8位有效数字 * @param string|float * @return int */ function kgYuanTogFenDanWei($KgYuan) { $gFen = $KgYuan / 10; return $gFen; } function floatDiv($param) { return $param / 100000000; } function floatMul($param) { return $param * 100000000; } /** * 分/克 转为 元/千克 * @param string|float * @return int */ function gFenToKgYuanDanWei($gFen) { $kgYuan = $gFen * 10; return $kgYuan; } /** * 获取当前的时间(毫秒) * @return float */ function getMillisecond() { list($t1, $t2) = explode(' ', microtime()); return (float)sprintf('%.0f', (floatval($t1) + floatval($t2)) * 1000); } /** * 多维数组转树状结构 * * @param $tree * @param int $rootId * @return array */ function arr2tree($tree, $rootId = 0) { $return = []; foreach ($tree as $leaf) { if ($leaf['pid'] == $rootId) { foreach ($tree as $subleaf) { if ($subleaf['pid'] == $leaf['id']) { $leaf['children'] = arr2tree($tree, $leaf['id']); break; } } $return[] = $leaf; } } return $return; } /** * <生成订单号> * 规则说明: 来源(pc/ios/android)1位 + 订单类型标示(海淘/门票)1位 + 时间戳转日期(20171107)8位 + 用户id(2位) + 毫秒时间提取(4位) * @param $orderFrom * @param $orderTypeId * @param $userId * @return int */ function createOrderSn($orderFrom, $orderTypeId, $userId) { $no = $orderFrom . $orderTypeId . date('Ymd') . substr(strval($userId + 100), -2) . substr(microtime(), 2, 4) . sprintf('%02d', rand(1000, 9999)); return $no; } /** * 按照日期生成流水号 * @param string $maxNo 当天最后一条数据编号 */ function createSerialNumberByDate($maxNo = '',$dateLength = 8, $lenght = 4) { $number = 0; if( !empty($maxNo) ){ $todayLastNo = explode('-',$maxNo); $number = intval($todayLastNo[1]); } $number = $number+1; switch ($dateLength){ case 12: // 根据年月日时分生成流水号 $date = date('YmdHi',time()); break; case 14: // 根据年月日时分秒生成流水号 $date = date('YmdHis',time()); break; default: // 根据年月日生成流水号 $date = date('Ymd',time()); } return $date.'-'.str_pad($number,$lenght,'0',STR_PAD_LEFT); } /** * 生成编码 * @param $prefix 编码前缀 例如:采购入库单 CGRK * @param $id 自动id * @param int $length 编码长度 * @return string */ function createCode($prefix, $id, $length = 6) { $idLength = strlen((string)$id); $leaveLength = $length - $idLength; $zeroStr = ""; if ($leaveLength > 0) { $zeroStr = str_repeat('0', $leaveLength); } return strtoupper($prefix) . $zeroStr . $id; } /** * 随机生成16位字符串 * @return string 生成的字符串 */ function getRandomStr($lenght = 16) { $str = ""; $str_pol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"; $max = strlen($str_pol) - 1; for ($i = 0; $i < $lenght; $i++) { $str .= $str_pol[mt_rand(0, $max)]; } return $str; } /* * uuid 唯一序列码 */ function uuid($prefix = '') { $chars = md5(uniqid(mt_rand(), true)); $uuid = substr($chars,0,8) . '-'; $uuid .= substr($chars,8,4) . '-'; $uuid .= substr($chars,12,4) . '-'; $uuid .= substr($chars,16,4) . '-'; $uuid .= substr($chars,20,12); return $prefix . $uuid; } /** * 获取 当天,昨天,本周,本月,本年时间戳 */ function gettimestamp($name = 'today',$param = ''){ switch ($name){ case 'today'://今天 $timeamp['start'] = strtotime(date('Y-m-d')); $timeamp['end'] = strtotime(date('Y-m-d',strtotime('+1 day'))); break; case 'yesterday'://昨天 $timeamp['start'] = strtotime(date('Y-m-d',strtotime('-1 day'))); $timeamp['end'] = strtotime(date('Y-m-d')); break; case 'beforyesterday'://前天 $timeamp['start'] = strtotime(date('Y-m-d',strtotime('-2 day'))); $timeamp['end'] = strtotime(date('Y-m-d',strtotime('-1 day'))); break; case 'beforweek'://本周 $timeamp['start'] = strtotime(date("Y-m-d H:i:s",mktime(0, 0 , 0,date("m"),date("d")-date("w")+1,date("Y")))); $timeamp['end'] = strtotime(date("Y-m-d H:i:s",mktime(23,59,59,date("m"),date("d")-date("w")+7,date("Y")))); break; case 'nowmonth'://本月 $timeamp['start'] = strtotime(date('Y-m-01')); $timeamp['end'] = strtotime(date('Y-m-d',strtotime('+1 day'))); break; case 'permonth'://上月 $timeamp['start'] = strtotime(date('Y-m-01',strtotime('-1 month'))); $timeamp['end'] = strtotime(date('Y-m-01')); break; case 'preweek'://上周 注意我们是从周一开始算 $timeamp['start'] = strtotime(date('Y-m-d',strtotime('-2 week Monday'))); $timeamp['end'] = strtotime(date('Y-m-d',strtotime('-1 week Monday +1 day'))); break; case 'nowweek'://本周 $timeamp['start'] = strtotime(date('Y-m-d',strtotime('-1 week Monday'))); $timeamp['end'] = strtotime(date('Y-m-d',strtotime('+1 day'))); break; case 'preday'://近三个月 // $timeamp['start'] = strtotime(date('Y-m-d'),strtotime($param.' day')); $timeamp['start'] = strtotime("-0 year -3 month -0 day"); $timeamp['end'] = strtotime(date('Y-m-d')); break; case 'nextday'://30 $timeamp['start'] = strtotime(date('Y-m-d')); $timeamp['end'] = strtotime(date('Y-m-d'),strtotime($param.' day')); break; case 'preyear'://去年 $timeamp['start'] = strtotime(date('Y-01-01',strtotime('-1 year'))); $timeamp['end'] = strtotime(date('Y-12-31',strtotime('-1 year'))); break; case 'nowyear'://今年 $timeamp['start'] = strtotime(date('Y-01-01')); $timeamp['end'] = strtotime(date('Y-m-d',strtotime('+1 day'))); break; case 'quarter'://季度 $quarter = empty($param) ? ceil((date('n'))/3) : $param;//获取当前季度 $timeamp['start'] = mktime(0, 0, 0,$quarter*3-2,1,date('Y')); $timeamp['end'] = mktime(0, 0, 0,$quarter*3+1,1,date('Y')); // $timeamp['end'] = mktime(23,59,59,$quarter*3,date('t',mktime(0, 0 , 0,$quarter*3,1,date("Y"))),date('Y')); break; default: $timeamp['start'] = strtotime(date('Y-m-d')); $timeamp['end'] = strtotime(date('Y-m-d',strtotime('+1 day'))); break; } return $timeamp; }