默塞德河, 优胜美地国家公园, 加利福尼亚, 美国 (© Ron and Patty Thomas/Getty Images)

Welcom to 评论 - lizhenqiu blog!

    #115

    作者:广西南宁市
    now := time.Now() // 方法一: beginningOfDay := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location()) log.Println("今日已过(纳秒):", now.UnixNano()-beginningOfDay.UnixNano()) log.Println("今日已过(微秒):", now.UnixMicro()-beginningOfDay.UnixMicro()) log.Println("今日已过(毫秒):", now.UnixMilli()-beginningOfDay.UnixMilli()) log.Println("今日已过(秒):", now.Unix()-beginningOfDay.Unix()) // 方法二: passedTimeNs := now.UnixNano() - beginningOfDay.UnixNano() log.Println("今日已过(纳秒):", passedTimeNs) log.Println("今日已过(微秒):", passedTimeNs/1e3) log.Println("今日已过(毫秒):", passedTimeNs/1e6) log.Println("今日已过(秒):", passedTimeNs/1e9)
    Run code
    Cut to clipboard
      文章:Golang版更换windows壁纸  发表时间:2023-04-15, 01:00:22  
      展开↯

      #116

      作者:广西南宁市
      now:= time.Now() fmt.Println(now.Unix()) // 1565084298 秒 fmt.Println(now.UnixNano()) // 1565084298178502600 纳秒 fmt.Println(now.UnixNano() / 1e6) // 1565084298178 毫秒
      Run code
      Cut to clipboard
        文章:Golang版更换windows壁纸  发表时间:2023-04-15, 00:59:22  
        展开↯

        #117

        作者:广西南宁市
        package main // 打开系统默认浏览器 import ( "fmt" "os/exec" "runtime" ) var commands = map[string]string{ "windows": "start", "darwin": "open", "linux": "xdg-open", } func Open(uri string) error { run, ok := commands[runtime.GOOS] if !ok { return fmt.Errorf("don't know how to open things on %s platform", runtime.GOOS) } cmd := exec.Command(run, uri) return cmd.Start() } func main() { Open("http://baidu.com") }
        Run code
        Cut to clipboard
          文章:Golang版更换windows壁纸  发表时间:2023-04-15, 00:57:52  
          展开↯

          #118

          作者:广西南宁市
          golang里跳转到其他网页
          package main import ( "github.com/labstack/echo" "net/http" ) func HandleWelcome() func(c echo.Context) error { return func(c echo.Context) error { res := c.Response() w := res.Writer r := c.Request() http.Redirect(w, r, "http://www.baidu.com", http.StatusFound) //跳转到百度 return nil } } func main() { e := echo.New() e.GET("/", HandleWelcome()) e.Logger.Fatal(e.Start(":1323")) }
          Run code
          Cut to clipboard
            文章:Golang版更换windows壁纸  发表时间:2023-04-15, 00:57:13  
            展开↯

            #119

            作者:广西南宁市
            pickerOptions: { shortcuts: [ { text: '今日', onClick(picker) { const end = new Date(); const start = new Date(); // start.setTime(start.getTime() - 3600 * 1000 * 24 * 7); picker.$emit('pick', [start, end]); } }, { text: '昨 天', onClick(picker) { const end = new Date(); const start = new Date(); start.setTime(start.getTime() - 3600 * 1000 * 24 * 1); end.setTime(end.getTime() - 3600 * 1000 * 24 * 1); picker.$emit('pick', [start, end]); } }, { text: '前 天', onClick(picker) { const end = new Date(); const start = new Date(); start.setTime(start.getTime() - 3600 * 1000 * 24 * 2); end.setTime(end.getTime() - 3600 * 1000 * 24 * 2); picker.$emit('pick', [start, end]); } }, { text: '大前天', onClick(picker) { const end = new Date(); const start = new Date(); start.setTime(start.getTime() - 3600 * 1000 * 24 * 3); end.setTime(end.getTime() - 3600 * 1000 * 24 * 3); picker.$emit('pick', [start, end]); } }, { text: '本周', onClick(picker) { let now = new Date(); //当前日期 let nowDayOfWeek = now.getDay(); //今天本周的第几天 let nowDay = now.getDate(); //当前日 let nowMonth = now.getMonth(); //当前月 let nowYear = now.getFullYear(); //当前年 const start = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek) const end = new Date(nowYear, nowMonth, nowDay + (6 - nowDayOfWeek)) start.setTime(start.getTime() + 3600 * 1000 * 24 * 1); end.setTime(end.getTime() + 3600 * 1000 * 24 * 1); picker.$emit('pick', [start, end]); } }, { text: '上 周', onClick(picker) { let now = new Date(); //当前日期 let nowDayOfWeek = now.getDay(); //今天本周的第几天 let nowDay = now.getDate(); //当前日 let nowMonth = now.getMonth(); //当前月 let nowYear = now.getFullYear(); //当前年 const start = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek) const end = new Date(nowYear, nowMonth, nowDay + (6 - nowDayOfWeek)) start.setTime(start.getTime() + 3600 * 1000 * 24 * 1 - 3600 * 1000 * 24 * 7); end.setTime(end.getTime() + 3600 * 1000 * 24 * 1 - 3600 * 1000 * 24 * 7); picker.$emit('pick', [start, end]); } }, { text: '本月', onClick(picker) { let now = new Date(); //当前日期 // var nowDayOfWeek = now.getDay(); //今天本周的第几天 // var nowDay = now.getDate(); //当前日 let nowMonth = now.getMonth(); //当前月 let nowYear = now.getFullYear(); //当前年 const start = new Date(nowYear, nowMonth, 1) const end = new Date(nowYear, nowMonth + 1, 0) start.setTime(start.getTime() + 3600 * 1000 * 24 * 0); end.setTime(end.getTime() + 3600 * 1000 * 24 * 0); picker.$emit('pick', [start, end]); } }, { text: '上个月', onClick(picker) { let now = new Date(); //当前日期 // var nowDayOfWeek = now.getDay(); //今天本周的第几天 // var nowDay = now.getDate(); //当前日 let nowMonth = now.getMonth(); //当前月 let nowYear = now.getFullYear(); //当前年 const start = new Date(nowYear, nowMonth-1, 1) const end = new Date(nowYear, nowMonth, 1) start.setTime(start.getTime() + 3600 * 1000 * 24 * 0); end.setTime(end.getTime() -1 + 3600 * 1000 * 24 * 0); picker.$emit('pick', [start, end]); } }, { text: '上个季度', onClick(picker) { let now = new Date(); //当前日期 // var nowDayOfWeek = now.getDay(); //今天本周的第几天 // var nowDay = now.getDate(); //当前日 let nowMonth = now.getMonth(); //当前月 let nowYear = now.getFullYear(); //当前年 let jd=Math.ceil((nowMonth + 1) / 3)-1; const start = new Date(nowYear, (jd-1)*3, 1) const end = new Date(nowYear, jd*3, 0) start.setTime(start.getTime() + 3600 * 1000 * 24 * 0); end.setTime(end.getTime() + 3600 * 1000 * 24 * 0); picker.$emit('pick', [start, end]); } }, { text: '本季度', onClick(picker) { let now = new Date(); //当前日期 // var nowDayOfWeek = now.getDay(); //今天本周的第几天 // var nowDay = now.getDate(); //当前日 let nowMonth = now.getMonth(); //当前月 let nowYear = now.getFullYear(); //当前年 let jd=Math.ceil((nowMonth + 1) / 3); const start = new Date(nowYear, (jd-1)*3, 1) const end = new Date(nowYear, jd*3, 0) start.setTime(start.getTime() + 3600 * 1000 * 24 * 0); end.setTime(end.getTime() + 3600 * 1000 * 24 * 0); picker.$emit('pick', [start, end]); } }, { text: '最近一周', onClick(picker) { const end = new Date(); const start = new Date(); start.setTime(start.getTime() - 3600 * 1000 * 24 * 7); picker.$emit('pick', [start, end]); } }, { text: '最近一个月', onClick(picker) { const end = new Date(); const start = new Date(); start.setTime(start.getTime() - 3600 * 1000 * 24 * 30); picker.$emit('pick', [start, end]); } }, { text: '最近三个月', onClick(picker) { const end = new Date(); const start = new Date(); start.setTime(start.getTime() - 3600 * 1000 * 24 * 90); picker.$emit('pick', [start, end]); } }], disabledDate:(dd_date_time)=> { return dd_date_time.getTime() > new Date().getTime(); } },
            Run code
            Cut to clipboard
              文章:js获取本周、本月、本季度、本年开始,结束时间  发表时间:2023-04-07, 14:36:08  
              展开↯

              #120

              作者:广西南宁市
              go mod init 新模块名字
              Run code
              Cut to clipboard

                go get -u github.com/gin-gonic/gin
                Run code
                Cut to clipboard
                  文章:Golang版更换windows壁纸  发表时间:2023-04-07, 14:28:23  
                  展开↯

                  #121

                  作者:广西南宁市
                  package main import ( "encoding/binary" "flag" "fmt" "log" "net" "runtime" "time" "github.com/gogf/gf/os/glog" "github.com/gogf/gf/os/gproc" "github.com/gogf/gf/text/gstr" "github.com/lxn/walk" ) const ntpEpochOffset = 2208988800 type packet struct { Settings uint8 Stratum uint8 Poll int8 Precision int8 RootDelay uint32 RootDispersion uint32 ReferenceID uint32 RefTimeSec uint32 RefTimeFrac uint32 OrigTimeSec uint32 OrigTimeFrac uint32 RxTimeSec uint32 RxTimeFrac uint32 TxTimeSec uint32 TxTimeFrac uint32 } func main() { var timeLayoutStr = "2006-01-02 15:04:05" ntime := getremotetime() ts := ntime.Format(timeLayoutStr) //time转string fmt.Print(ts) // 2021-08-29 15:53:35.922579627 +0800 CST UpdateSystemDate(ts) } func getremotetime() time.Time { var host string // 182.92.12.11:123 是阿里的ntp服务器,可以换成其他域名的 flag.StringVar(&host, "e", "ntp.aliyun.com:123", "NTP host") flag.Parse() conn, err := net.Dial("udp", host) if err != nil { log.Fatalf("failed to connect: %v", err) } defer conn.Close() if err := conn.SetDeadline(time.Now().Add(15 * time.Second)); err != nil { log.Fatalf("failed to set deadline: %v", err) } req := &packet{Settings: 0x1B} if err := binary.Write(conn, binary.BigEndian, req); err != nil { log.Fatalf("failed to send request: %v", err) } rsp := &packet{} if err := binary.Read(conn, binary.BigEndian, rsp); err != nil { log.Fatalf("failed to read server response: %v", err) } secs := float64(rsp.TxTimeSec) - ntpEpochOffset nanos := (int64(rsp.TxTimeFrac) * 1e9) >> 32 showtime := time.Unix(int64(secs), nanos) return showtime } func UpdateSystemDate(dateTime string) bool { system := runtime.GOOS switch system { case "windows": { _, err1 := gproc.ShellExec(`date ` + gstr.Split(dateTime, " ")[0]) _, err2 := gproc.ShellExec(`time ` + gstr.Split(dateTime, " ")[1]) if err1 != nil && err2 != nil { glog.Info("更新系统时间错误:请用管理员身份启动程序!") walk.MsgBox(nil, "出错啦!!!", "更新系统时间错误,请右键,选择以管理员身份运行程序!", walk.MsgBoxIconInformation) return false } return true } case "linux": { _, err1 := gproc.ShellExec(`date -s "` + dateTime + `"`) if err1 != nil { glog.Info("更新系统时间错误:", err1.Error()) return false } return true } case "darwin": { _, err1 := gproc.ShellExec(`date -s "` + dateTime + `"`) if err1 != nil { glog.Info("更新系统时间错误:", err1.Error()) return false } return true } } return false }
                  Run code
                  Cut to clipboard
                    文章:golang 获取NTP服务器时间并自动设置  发表时间:2023-03-31, 02:55:45  
                    展开↯

                    #122

                    作者:广西南宁市
                    go 修改操作系统时间 https://www.cnblogs.com/Kingram/p/12627709.html go 作为 ntp 客户端接收时间 https://github.com/vladimirvivien/go-ntp-client/blob/master/time.go 时间格式化 https://www.cnblogs.com/-xuzhankun/p/10812048.html package main import ( "encoding/binary" "flag" "fmt" "log" "net" "runtime" "time" "github.com/gogf/gf/os/glog" "github.com/gogf/gf/os/gproc" "github.com/gogf/gf/text/gstr" ) const ntpEpochOffset = 2208988800 type packet struct { Settings uint8 Stratum uint8 Poll int8 Precision int8 RootDelay uint32 RootDispersion uint32 ReferenceID uint32 RefTimeSec uint32 RefTimeFrac uint32 OrigTimeSec uint32 OrigTimeFrac uint32 RxTimeSec uint32 RxTimeFrac uint32 TxTimeSec uint32 TxTimeFrac uint32 } func main() { var timeLayoutStr = "2006-01-02 15:04:05" ntime := getremotetime() ts := ntime.Format(timeLayoutStr) //time转string fmt.Print(ts) // 2021-08-29 15:53:35.922579627 +0800 CST UpdateSystemDate(ts) } func getremotetime() time.Time { var host string // 182.92.12.11:123 是阿里的ntp服务器,可以换成其他域名的 flag.StringVar(&host, "e", "time.windows.com:123", "NTP host") flag.Parse() conn, err := net.Dial("udp", host) if err != nil { log.Fatalf("failed to connect: %v", err) } defer conn.Close() if err := conn.SetDeadline(time.Now().Add(15 * time.Second)); err != nil { log.Fatalf("failed to set deadline: %v", err) } req := &packet{Settings: 0x1B} if err := binary.Write(conn, binary.BigEndian, req); err != nil { log.Fatalf("failed to send request: %v", err) } rsp := &packet{} if err := binary.Read(conn, binary.BigEndian, rsp); err != nil { log.Fatalf("failed to read server response: %v", err) } secs := float64(rsp.TxTimeSec) - ntpEpochOffset nanos := (int64(rsp.TxTimeFrac) * 1e9) >> 32 showtime := time.Unix(int64(secs), nanos) return showtime } func UpdateSystemDate(dateTime string) bool { system := runtime.GOOS switch system { case "windows": { _, err1 := gproc.ShellExec(`date ` + gstr.Split(dateTime, " ")[0]) _, err2 := gproc.ShellExec(`time ` + gstr.Split(dateTime, " ")[1]) if err1 != nil && err2 != nil { glog.Info("更新系统时间错误:请用管理员身份启动程序!") return false } return true } case "linux": { _, err1 := gproc.ShellExec(`date -s "` + dateTime + `"`) if err1 != nil { glog.Info("更新系统时间错误:", err1.Error()) return false } return true } case "darwin": { _, err1 := gproc.ShellExec(`date -s "` + dateTime + `"`) if err1 != nil { glog.Info("更新系统时间错误:", err1.Error()) return false } return true } } return false }
                    Run code
                    Cut to clipboard
                      文章:golang 获取NTP服务器时间并自动设置  发表时间:2023-03-31, 02:54:28  
                      展开↯

                      #123

                      作者:广西南宁市
                      package main import ( "github.com/gogf/gf/os/glog" "github.com/gogf/gf/os/gproc" "github.com/gogf/gf/text/gstr" "runtime" ) func main() { UpdateSystemDate("2020-03-20 15:02:41.372") } func UpdateSystemDate(dateTime string) bool { system := runtime.GOOS switch system { case "windows": { _, err1 := gproc.ShellExec(`date ` + gstr.Split(dateTime, " ")[0]) _, err2 := gproc.ShellExec(`time ` + gstr.Split(dateTime, " ")[1]) if err1 != nil && err2 != nil { glog.Info("更新系统时间错误:请用管理员身份启动程序!") return false } return true } case "linux": { _, err1 := gproc.ShellExec(`date -s "` + dateTime + `"`) if err1 != nil { glog.Info("更新系统时间错误:", err1.Error()) return false } return true } case "darwin": { _, err1 := gproc.ShellExec(`date -s "` + dateTime + `"`) if err1 != nil { glog.Info("更新系统时间错误:", err1.Error()) return false } return true } } return false }
                      Run code
                      Cut to clipboard
                        文章:golang 获取NTP服务器时间并自动设置  发表时间:2023-03-31, 02:54:07  
                        展开↯

                        #124

                        作者:广西南宁市
                        Golang-设置系统时间
                        // 接收UDP时间广播,并设置系统时间 func (sl *Slaver) masTimeSync(ch chan int) { // 开始监听广播时间 log.Printf("time sync listen [%s]", sl.Node.Port.PortUdpSlaTimeSync) for { (func() { // 监听 mas 发来的同步时间 lis, err := socket.NewListen("", sl.Node.Port.PortUdpSlaTimeSync, 3).ListenUDP() // 判断监听是否建立成功 if err != nil { // 异常抛出 log.Fatalln(err) } // 保证监听正常关闭 defer lis.Close() // 循环接收 for { // 每个时间戳大小不超过32字节 data := make([]byte, 32) // 读取时间戳 read, addr, err := lis.ReadFromUDP(data) // 检查是否接收错误 if err != nil { // 错误时从新接收 continue } // 判断是否为注册服务器所发 if addr != nil && strings.HasPrefix(addr.String(), sl.MasAddr) { // 转换远程时间戳 l, _ := strconv.ParseInt(fmt.Sprintf("%s", data[0:read]), 10, 64) //// 转换时间格式 //time := syscall.NsecToTimeval(l) //// 设置系统时间 "Linux Private Settimeofday" //if err := syscall.Settimeofday(&time); err != nil { // // 异常抛出 // log.Fatalln(err) //} // 设置到系统 cmd := exec.Command("date", "-s", time.Unix(0, l).Format("01/02/2006 15:04:05.999999999")) // 设置 cmd.Run() } } })() } }
                        Run code
                        Cut to clipboard
                          文章:golang 获取NTP服务器时间并自动设置  发表时间:2023-03-31, 02:53:37  
                          展开↯

                          #125

                          作者:广西南宁市
                          访问的地址被防火墙给屏蔽了,你需要改成我们国内可用的代理地址
                          在cmd中输入:
                          go env -w GOPROXY=https://goproxy.cn
                          Run code
                          Cut to clipboard

                            安装GO语言相关插件

                            在vscode中安装GO语言相关插件的时候,报错:

                            A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
                            文章:Go语言捕获fatal错误,程序异常退出,致命错误  发表时间:2023-03-31, 02:52:05  
                            展开↯

                            #126

                            作者:广西南宁市
                            svn access to ...forbidden
                            解决办法清除svn缓存:
                            TortoiseSVN-> Settings -> Saved Data
                            然后clear,
                            主要是最后一个(Authentication data)clear,
                            或者直接clear all
                            #,广西南宁市,2023-02-24,16:37:01, svn命令行提交新增所有修改的文件
                            svn add . --no-ignore --force svn ci -m "提交所有全部文件"
                            Run code
                            Cut to clipboard

                              命令行执行svn ci提交的时候,如果是新增的文件,不会被提交
                              加上svn add命令,即可自动添加新增的文件
                              然后再执行svn ci命令,即可将新增的文件提交到svn
                              #,广西南宁市,2023-02-24,16:37:57, svn配置钩子后,提交代码提示post-commit hook failed (exit code 255) with no output错误
                              post-commit hook failed (exit code 255) with no output.
                              就是我们没有为post-commit赋予执行权限
                              没有x权限,为post-commit添加x权限

                              chmod +x post-commit
                              #,广西南宁市,2023-02-24,16:39:08, svn: line 19: Option expected
                              修改svnserve.conf时,打开注释时,配置的前面有空格,应该顶格写
                              文章:Linux系统中svn服务器设置开机启动  发表时间:2020-07-12, 18:53:24  
                              展开↯

                              #127

                              作者:广西南宁市
                              [mysqld]
                              port=3306

                              log_bin_trust_function_creators=1
                              文章:解决myql Error Code : 1060 Duplicate column name 'xxx' 问题  发表时间:2023-02-20, 00:57:19  
                              展开↯

                              #128

                              作者:广西南宁市
                              [Err] 1060 - Duplicate column name 'XXX'
                              在mysql中,多个表联合查询时,出现错误:[Err] 1060 - Duplicate column name 'XXX'

                              原因:

                              使用的是:select * 操作,造成了列名重复,例如a表里面有列名'content',b表里面也有列名'content',此时就会报错。

                              解决方法:

                              直接指定想要返回的是什么,例如:select a.content 来操作。
                              文章:解决myql Error Code : 1060 Duplicate column name 'xxx' 问题  发表时间:2023-02-20, 00:55:16  
                              展开↯

                              #129

                              作者:广西南宁市
                              css3 实现瀑布流
                              .wrap { margin-top: 50px; width: 100%; padding: 0 20px; /* 瀑布流容器内元素的间隔 */ column-gap:10px; /* 瀑布容器内排列的列数 */ column-count: 2; } .item { padding: 10px; border: 1px solid #000; margin-bottom: 10px; height: 50px; /* avoid避免在主体框中插入任何中断(页面,列或区域) */ break-inside: avoid; }
                              Run code
                              Cut to clipboard
                                #,广西南宁市,2023-01-13,21:05:22, css3瀑布流顶部不对齐,列断裂
                                问题展现

                                找了半天,发现是 item 的 margin-bottom 导致的:第一列的最后一个item的margin-bottom跑到第二列第一个item上面了,改成padding-bottom即可,
                                因为padding属于内容,只要不折断,就不会跑到另一列
                                文章:js判断一个值是否为数字  发表时间:2023-01-13, 17:14:25  
                                展开↯

                                #130

                                作者:广西南宁市
                                微信小程序页面自动滚动到指定位置
                                1.使用wx.createSelectorQuery().select().boundingClientRect()查询到需要滚动到的元素位置 2.使用wx.pageScrollTo()将页面滚动到对应位置
                                Run code
                                Cut to clipboard

                                  scrollTo() { // 1.使用wx.createSelectorQuery()查询到需要滚动到的元素位置 wx.createSelectorQuery().select('.bb4').boundingClientRect(res => { // 到这里,我们可以从res中读到class为bb4的top,即离顶部的距离(px) // 2使用wx.pageScrollTo()将页面滚动到对应位置 wx.pageScrollTo({ scrollTop: res.top, // 滚动到的位置(距离顶部 px) duration: 0 //滚动所需时间 如果不需要滚动过渡动画,设为0(ms) }) }).exec() }
                                  Run code
                                  Cut to clipboard

                                    scrollTo() { // 1.使用wx.createSelectorQuery()查询到需要滚动到的元素位置 wx.createSelectorQuery().select('.bb4').boundingClientRect(res => { // 2.使用wx.getSysTemInfo()获取设备及页面高度windowHeight(px) wx.getSystemInfo({ success(ress) { wx.pageScrollTo({ // 3. 滚动的距离根据设备的页面高度进行微调(px) scrollTop: res.top - ress.windowHeight/2 + 50, duration: 200 }) } }) }).exec() }
                                    Run code
                                    Cut to clipboard
                                      文章:js判断一个值是否为数字  发表时间:2023-01-13, 17:15:28  
                                      展开↯

                                      #131

                                      作者:广西南宁市
                                      JavaScript 判断是否为数字
                                      jquery中$.isNumeric的源码
                                      !isNaN(parseFloat(value)) && isFinite(value);
                                      Run code
                                      Cut to clipboard
                                        文章:js判断一个值是否为数字  发表时间:2023-01-13, 17:13:44  
                                        展开↯

                                        #132

                                        作者:广西南宁市
                                        是 .pem 不是 .pen
                                        文章:腾讯云申请自有证书上传部署到七牛云  发表时间:2022-11-29, 01:08:52  
                                        展开↯

                                        #133

                                        作者:广西南宁市西乡塘区
                                        Thinkphp的 is null 查询条件是什么,
                                        以及exp表达式如何使用

                                        一、总结
                                        一句话总结:$map['name'] = array('exp','is null');
                                        1、is null判断的常见错误写法有哪些?
                                        $map1['f_jieduan_id']=['=',null];
                                        $map1['f_g_id']=['=',null];

                                        2、
                                        $map1['f_jieduan_id']=['is null'];
                                        $map1['f_g_id']=['is null'];

                                        3、
                                        $map['name'] = array('is',null);//无法实现
                                        2、thinkphp中exp表达式如何使用,作用是什么?
                                        其实就是告诉thinkphp这是原生的sql语句

                                        关于exp表达式:
                                        可支持任何sql语法
                                        如:
                                        $map['id'] = array('between',array(1,5));

                                        可写成:
                                        $map['id'] = array('exp','between (1,5)');

                                        还可用于数据更新:
                                        $data['age'] = array('exp','age+1');
                                        M('user')->where('id=1')->save($data);//该用户的年龄加1

                                        二、Thinkphp的 is null 查询条件,以及exp表达式的使用
                                        Thinkphp中若要用到 is null 查询条件,使用以下方法无法实现:

                                        $map['name'] = array('is',null);//无法实现
                                        可使用exp表达式:

                                        $map['name'] = array('exp','is null');
                                        关于exp表达式:
                                        可支持任何sql语法
                                        如:
                                        $map['id'] = array('between',array(1,5));

                                        可写成:
                                        $map['id'] = array('exp','between (1,5)');

                                        还可用于数据更新:
                                        $data['age'] = array('exp','age+1');
                                        M('user')->where('id=1')->save($data);//该用户的年龄加1

                                        参考:Thinkphp的 is null 查询条件,以及exp表达式的使用 - CSDN博客
                                        https://blog.csdn.net/codercwm/article/details/51523963

                                        三、is null判断的常见错误写法
                                        1、
                                        $map1['f_jieduan_id']=['=',null];
                                        $map1['f_g_id']=['=',null];

                                        2、
                                        $map1['f_jieduan_id']=['is null'];
                                        $map1['f_g_id']=['is null'];

                                        3、
                                        $map['name'] = array('is',null);//无法实现

                                        文章:程序员编程常用网页工具集[游戏]  发表时间:2022-11-24, 15:36:10  
                                        展开↯
                                        你好,残忍屏蔽广告

                                        确定要清除编辑框内容吗?

                                        该删除操作将不可恢复。

                                        删除 取消

                                        激活Windows

                                        转到"设置"以激活Windows。