• 最新文章
  • linux
  • php
  • sql
  • 服务端
  • tool
  • cocos

mysql如何查询近一天/一周/一个月的数据

//今天 select * from 表名 where to_days(时间字段名) = to_days(now()); //昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1 //近7天 SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段名) //近30天 SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(时间字段名) //本月 SELECT * FROM 表名 WHERE DATE_FORMAT( 时间字段名, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' ) //上一月 SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( 时间字段名, '%Y%m' ) ) =1 //查询本季度数据 select * from `ht_invoice_information` where QUARTER(create_date)=QUARTER(now()); //查询上季度数据 select * from `ht_invoice_information` where QUARTER(create_date)=QUARTER(DATE_SUB(now(),interval 1 QUARTER)); //查询本年数据 select * from `ht_invoice_information` where YEAR(create_date)=YEAR(NOW()); //查询上年数据 select * from `ht_invoice_information` where year(create_date)=year(date_sub(now(),interval 1 year)); //查询当前这周的数据 SELECT name,submittime FROM enterprise WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now()); //查询上周的数据 SELECT name,submittime FROM enterprise WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now())-1; //查询上个月的数据 select name,submittime from enterprise where date_format(submittime,'%Y-%m')=date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),'%Y-%m') select * from user where DATE_FORMAT(pudate,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m') ; select * from user where WEEKOFYEAR(FROM_UNIXTIME(pudate,'%y-%m-%d')) = WEEKOFYEAR(now()) select * from user where MONTH(FROM_UNIXTIME(pudate,'%y-%m-%d')) = MONTH(now()) select * from user where YEAR(FROM_UNIXTIME(pudate,'%y-%m-%d')) = YEAR(now()) and MONTH(FROM_UNIXTIME(pudate,'%y-%m-%d')) = MONTH(now()) select * from user where pudate between 上月最后一天 and 下月第一天 //查询当前月份的数据 select name,submittime from enterprise where date_format(submittime,'%Y-%m')=date_format(now(),'%Y-%m')

各种时间操作(PHP)

一、获取时间 1、获取本周一 date('Y-m-d', (time() - ((date('w') == 0 ? 7 : date('w')) - 1) * 24 * 3600)); //w为星期几的数字形式,这里0为周日 2、获取本周日 date('Y-m-d', (time() + (7 - (date('w') == 0 ? 7 : date('w'))) * 24 * 3600)); //同样使用w,以现在与周日相关天数算 3、获取上周一 date('Y-m-d', strtotime('-1 monday', time())); //无论今天几号,-1 monday为上一个有效周未 4、获取上周日 date('Y-m-d', strtotime('-1 sunday', time())); //上一个有效周日,同样适用于其它星期 5、获取本月一日 date('Y-m-d', strtotime(date('Y-m', time()) . '-01 00:00:00')); //直接以strtotime生成 6、获取本月最后一日 date('Y-m-d', strtotime(date('Y-m', time()) . '-' . date('t', time()) . ' 00:00:00')); //t为当月天数,28至31天 7、获取上月一日 date('Y-m-d', strtotime('-1 month', strtotime(date('Y-m', time()) . '-01 00:00:00'))); //本月一日直接strtotime上减一个月 8、获取上月最后一日 date('Y-m-d', strtotime(date('Y-m', time()) . '-01 00:00:00') - 86400); //本月一日减一天即是上月最后一日 9、获取当前时间前6天 date('Y-m-d', strtotime('-6 days')); 10、指定时间加一个月 date("Y-m-d",strtotime("+1 month",strtotime("2012-02-04"))); 11、指定时间加一周 date("Y-m-d",strtotime("+1 week",strtotime("2011-02-04"))); 12、指定时间加一天 date("Y-m-d",strtotime("+1 day",strtotime("2011-02-04"))); 13、当前时间加一天 date('Y-m-d H:i:s',strtotime('+1 day')); 14、当前时间加一小时 date('Y-m-d H:i:s',strtotime('+1 hour')); 15、当前时间加一分钟 date('Y-m-d H:i:s',strtotime('+1 minute')); 16、当前时间加一月 date('Y-m-d H:i:s',strtotime('+1 mouth')); 17、获取当前月的第一天和最后一天 $date = date('Y-m-d'); function getMonth($date){ $firstday = date("Y-m-01",strtotime($date)); $lastday = date("Y-m-d",strtotime("$firstday +1 month -1 day")); return array($firstday,$lastday); } 18、获取上月的第一天和最后一天 $date = date('Y-m-d'); function getlastMonthDays($date){ $timestamp=strtotime($date); $firstday=date('Y-m-01',strtotime(date('Y',$timestamp).'-'.(date('m',$timestamp)-1).'-01')); $lastday=date('Y-m-d',strtotime("$firstday +1 month -1 day")); return array($firstday,$lastday); } 19、获取下月的第一天和最后一天 $date = date('Y-m-d'); function getNextMonthDays($date){ $timestamp=strtotime($date); $arr=getdate($timestamp); if($arr == 12){ $year=$arr +1; $month=$arr -11; $firstday=$year.'-0'.$month.'-01'; $lastday=date('Y-m-d',strtotime("$firstday +1 month -1 day")); }else{ $firstday=date('Y-m-01',strtotime(date('Y',$timestamp).'-'.(date('m',$timestamp)+1).'-01')); $lastday=date('Y-m-d',strtotime("$firstday +1 month -1 day")); } return array($firstday,$lastday); } 二、计算指定时间和当前时间相差年月日时分秒 date_default_timezone_set('PRC');//声明时区 $enddate="2018-6-14 17:29:10"; $date=floor((strtotime($enddate)-strtotime(date('Y-m-d H:i:s')))/86400); echo "相差天数:".$date."天<br/><br/>"; $hour=floor((strtotime($enddate)-strtotime(date('Y-m-d H:i:s')))%86400/3600); echo "相差小时数:".$hour."小时<br/><br/>"; $minute=floor((strtotime($enddate)-strtotime(date('Y-m-d

宝塔面板创建FTP帐号连接失败的解决方法 服务器发回了不可路由的地址。使用服务器地址代替

在宝塔面板中创建了FTP帐号后,使用FileZilla、CuteFtp等FTP软件无法连接,出现类似“服务器回应不可路由的地址。使用服务器地址代替。”,或者 “错误: 读取目录列表失败” 的错误信息,可以参考本文的解决方法,来排查处理。 【1】排查宝塔面板中的FTP服务是否启动 在宝塔面板的【软件商店】切换至 【已安装】软件列表,找到其中的 Pure-FTPd,点开右侧对应的 设置 项,检查该服务器软件的FTP服务器软件的当前状态是否为 开启 状态。 【2】检查服务器(防火墙)端口设置 服务器(防火墙)端口是否放行,配置是否正确,直接关系到FTP是否可以连接至服务器的重要因素。 首先,在宝塔面板的【安全】中的 系统防火墙,检查是否添加了21端口(FTP协议默认端口),如果使用 sftp,则还需要添加22端口; 另外,FTP被动模式端口范围(39000-40000)是否添加,如下图所示: 如果使用的是腾讯云 \ 阿里云的云服务器,还需要检查对应服务器端的安全组中的端口是否也进行了相应的放行设置。 【3】检查FTP用户名和密码 确保您使用正确的 FTP用户名 和 密码 进行连接。可以在宝塔面板的 FTP 管理页面查看当前FTP账户的用户名和密码,并确保输入的信息无误。 【4】检查被动模式(PASV)设置 FTP服务器默认处于主动模式,但有时FTP客户端可能需要切换为被动模式。在您的FTP客户端中,找到被动模式(PASV)设置选项,并确保其已启用。 在 FileZilla 的 站点管理器 中切换至 传输设置,把里面的 传输模式 设置为 被动。 其实,使用FTP软件连接服务器出现类似“服务器回应不可路由的地址。使用服务器地址代替。”,或者 “错误: 读取目录列表失败” 的错误信息,主要就是端口是否放行,建议主要排查宝塔面板和服务器端防火墙的端口设置。

golang jwt 签署令牌Authentication token

1.要安装 jwt 包,首先需要 安装Go,然后可以使用下面的命令将其添加jwt-go为 Go 程序中的依赖项。 go get -u github.com/golang-jwt/jwt/v5 2.将其导入到您的代码中: import "github.com/golang-jwt/jwt/v5" 3.demo func Test(t *testing.T) { //商户 subject := "01H" // 密钥 secretBase64 := "AwFj+OTCI=" secret, err := base64.StdEncoding.DecodeString(secretBase64) if err != nil { log.Fatalf("Error decoding base64 secret: %v", err) } // 过期秒数 expirseIn := 60 * time.Second // 创建jwt token token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ "sub": subject, "exp": time.Now().Add(expirseIn).Unix(), }) // 使用密钥签名 tokenString, err := token.SignedString(secret) if err != nil { log.Fatalf("Error signing token: %v", err) } fmt.Println("tokenString=", tokenString) m := make(mapinterface m = "www" m = "qqq" // 将数据转为JSON格式 jsonData, err := json.Marshal(m) if err != nil { log.Fatalf("Error marshalling JSON: %v", err) } client := &http.Client{} url := "https://demo.com" method := "POST" req, err := http.NewRequest(method, url, bytes.NewBuffer(jsonData)) if err != nil { log.Fatalf("Error creating request: %v", err) } req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", tokenString)) req.Header.Set("Content-Type", "application/json; charset=utf-8") resp, err := client.Do(req) if err != nil { log.Fatalf("Error sending request: %v", err) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { body, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatalf("Error reading response body: %v", err) } log.Printf("Response body: %s", string(body)) } log.Printf("Response StatusCode: %d,%d", resp.StatusCode,http.StatusOK) info := TestRespone{} err = ffjson.Unmarshal(body, &info) if err != nil { log.Printf("body

gin获取请求体(json格式)参数

gin 框架里 c.PostForm() 函数只能从表单中获取参数,不能从 body 中解析表单参数,也就是说你如果用 c.PostForm() 来解析获取参数,客户端发起请求时,如果参数放在表单(form-data)里,服务端能正常获取到参数,但是如果客户端把参数放在 raw 里,即使 header 里配置了 content-type:multipart/form-data,服务端仍就无法获取到参数。 c.PostForm获取表单数据 package main import ( "bytes" "fmt" "github.com/gin-gonic/gin" "io/ioutil" ) func main() { gin.SetMode(gin.ReleaseMode) r := gin.Default() r.GET("/test", func(c *gin.Context) { data, _ := ioutil.ReadAll(c.Request.Body) fmt.Printf("req.body=%s\n, content-type=%v\n", data, c.ContentType()) // 这点很重要,把字节流重新放回 body 中 c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(data)) // 获取参数 userName := c.PostForm("user_name") age := c.PostForm("age") fmt.Printf("userName=%s, age=%s\n", userName, age) c.JSON(200, "success") }) r.Run(":7000") } 或 func Test(c *gin.Context) error { m := make(mapinterface{}) m = c.Request.PostFormValue("memberid") // 商户ID m = c.Request.PostFormValue("orderid") // 订单号 } 从body中获取参数 package main import ( "bytes" "encoding/json" "fmt" "github.com/gin-gonic/gin" "io" "io/ioutil" ) type User struct { UserName string `json:"user_name"` Age int `json:"age"` } // 关键 func JSONDecode(r io.Reader, obj interface{}) error { if err := json.NewDecoder(r).Decode(obj); err != nil { return err } return nil } func main() { gin.SetMode(gin.ReleaseMode) r := gin.Default() r.POST("/test", func(c *gin.Context) { // 打印出 body //data, _ := ioutil.ReadAll(c.Request.Body) //fmt.Printf("req.body=%s\n, content-type=%v\n", data, c.ContentType()) var json User data, err := c.GetRawData() if err != nil { fmt.Println(err.Error()) } fmt.Println("data:", string(data)) // 把字节流重新放回 body 中 c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(data)) err2 := JSONDecode(c.Request.Body, &json) if err2 != nil { fmt.Println("decode err:", err2) } // 打印body中的参数 fmt.Println("user_name:", json.UserName, "age:", json.Age) c.JSON(200, "success") }) r.Run(":7000")

Cocos Creator插件脚本 在微信小游戏里不生效

上一个文章,在cocos creator中加载解压zip包没问题,但是在输出到微信小游戏后,在小游戏工具中运行后提示找不到这个插件。 折腾了好久,后来算了,不能用插件,我就不插了,直接用 在js文件头加上 const JSZip = require('jszip'); 下面的代码照常使用就行。 我的小游戏希望大家批平指正

Cocos Creator 加载zip文件,解压解析json

jszip的实际项目应用 游戏中有大量配置的情况下,文件会变得非常大,所以有些游戏会采用zip包压缩解压 例如我的这个成语填空游戏,配置文件加一起都有3m了,将游戏配置json文件一起压缩成zip包,加载后进行解压使用 在cocos中使用jszip 首先,在github上下载jszip库 下载地址 将下载的jszip.min.js放在项目assets/libs下,将jszip.js放在项目根目录的libs下。 (jszip.js在dist中) 然后将游戏的配置文件,多个json,压缩成zip包,放在resources/config下 代码中加载zip文件,并解析获取其中的游戏物品配置idiom.json loadZip() { let self = this; let url = cc.url.raw('resources/config/config.zip'); cc.loader.load({ url: url, type: "binary" }, (err, zipData) => { //2.1.3在安卓平台下会出现load不到资源的情况 if (err) { let httpUrl = `资源服务地址${url}`; console.log('loadConfigZip httpUrl: ', httpUrl); let oReq = new XMLHttpRequest(); oReq.open("GET", httpUrl, true); oReq.responseType = "arraybuffer"; oReq.onload = function (oEvent) { let arrayBuffer = oReq.response; // 注意:不是oReq.responseText if (arrayBuffer) { console.log('LoadConfig::unzip 0'); self.unzip(arrayBuffer); } }; oReq.send(null); } else { console.log("unzip unzip"); this.unzip(zipData); } }); }, unzip(zipData) { let self = this; let newZip = new JSZip(); // 因为将jszip导入为插件,所以可以全局直接访问 newZip.loadAsync(zipData).then(zip=>{ // console.log(zip); let fileList = zip.files; for(let filename in fileList){ zip.file(filename).async('string').then(data=>{ let json = JSON.parse(data); // console.log(JSON.stringify(json)); console.log(filename,json); if( filename == "idiom.json" ){ self.idiomDatas = json; self.readyGame(); } }); } }); }, 下面是我的微信小游戏,希望大家批评指正

golang 使用 gomail 发送邮件

安装gomail go get gopkg.in/gomail.v2 package main import ( "crypto/tls" "fmt" "gopkg.in/gomail.v2" ) func main() { test1() } func test1() { message := ` <p> Hello %s,</p> <p style="text-indent:2em">测试测试测试测试.</p> <p style="text-indent:2em">测试11111</p> ` // QQ 邮箱: // SMTP 服务器地址:smtp.qq.com(SSL协议端口:465/994 | 非SSL协议端口:25) // 163 邮箱: // SMTP 服务器地址:smtp.163.com(端口:25) host := "xxxxx" port := 25 userName := "xxxx" // 有些油箱登入名不是邮箱地址 password := "xxxx" fromemail := "xx@xx.com" m := gomail.NewMessage() m.SetHeader("From", fromemail) // 发件人 // m.SetHeader("From", "alias"+"<"+userName+">") // 增加发件人别名 // 多个收件人形式 // mailTo := string{ // "******@qq.com", // "******@qq.com", // } // m.SetHeader("To", mailTo...) m.SetHeader("To", "xxxxx@qq.com") // 收件人,可以多个收件人,但必须使用相同的 SMTP 连接 // 多个同上 // m.SetHeader("Cc", "******@qq.com") // 抄送,可以多个 // m.SetHeader("Bcc", "******@qq.com") // 暗送,可以多个 m.SetHeader("Subject", "发送测试11111") // 邮件主题 // text/html 的意思是将文件的 content-type 设置为 text/html 的形式,浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理。 // 可以通过 text/html 处理文本格式进行特殊处理,如换行、缩进、加粗等等 m.SetBody("text/html", fmt.Sprintf(message, "测试")) // text/plain的意思是将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理 // m.SetBody("text/plain", "纯文本") // m.Attach("test.sh") // 附件文件,可以是文件,照片,视频等等 // m.Attach("lolcatVideo.mp4") // 视频 // m.Attach("lolcat.jpg") // 照片 d := gomail.NewDialer( host, port, userName, password, ) // 关闭SSL协议认证 d.TLSConfig = &tls.Config{InsecureSkipVerify: true} if err := d.DialAndSend(m); err != nil { panic(err) } } package main import ( "gopkg.in/gomail.v2" "strconv" ) func SendMail(mailTo string,subject string, body string ) error { //定义邮箱服务器连接信息,如果是阿里邮箱 pass填密码,qq邮箱填授权码 mailConn := mapstring { "user": "zhangqiang@xxxx.com", "pass": "xxxx", "host": "smtp.mxhichina.com", "port": "465", } port, _

unity 从apk包中提取资源

使用本方法来提取资源有个前提就是资源没有被加密,这个问题会在后面进行研究。而且这个方式目前是在Windows平台下使用的。 以青蛙旅行这款游戏为例,先准备好其apk包,然后对其进行解压。这里有两种方式,一种是修改apk包后缀为zip然后解压,不过这样似乎会让xml文件呈现乱码显示,如果希望看到xml文件的就不建议这样了,但是如果只想提取资源的话应该不会受到影响。 另一种是使用apk反编译工具。这种方法可以看下面链接中一位博主的文章https://www.cnblogs.com/chen110xi/p/6612437.html 在之后就是要使用另一个工具了https://github.com/Perfare/UnityStudio/releases 这里是下载地址。 这是其打开的样子。之后点击file按钮选择load folder后会出现下面的图 一般资源都在assets下,选择这个文件夹就可以。之后会看到如下两张图 这两个一个是场景层级视图,一个是资源文件列表。在资源列表中,右边的大框可以预览资源,可以多选或单选然后用上面的export菜单按钮选择导出方式进行导出。整个过程很简单主要是利用工具。

免费批量域名可用性检查和 WHOIS 查询工具-Query.Domains

Query.Domains是什么 Query.Domains是一款在线免费批量域名可用性检查和 WHOIS 查询 工具,工具可以批量 WHOIS 检查工具,可根据 WHOIS 查询检查域名可用性等等。工具可为你的域名查询和批量 WHOIS 检查提供快速、准确且详细的结果,还提供提供批量 WHOIS 检查和域名可用性查询 API。 免费批量域名可用性检查和 WHOIS 查询工具 网站:https://query.domains/