Linux Docker 安装Mysql
首先安装docker,这里不做过多介绍#查看docker版本 docker --version #启动 systemctl start docker systemctl restart docker #搜索mysql镜像 docker search mysql docker pull mysql:latest #查看镜像 docker images 启动: docker run -itd \ --name mysql \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 mysql # -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。 # MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。 #进入MySQL: docker ps docker exec -it a469eb1589e bash #查看mysql版本: mysql --version #登录mysql mysql -uroot -p #查看数据库: show databases;#MySQL的安全设置 # 登录mysql mysql -u root -p # 修改root账号的密码,不同版本修改密码的SQL语句是不一样的 ALTER USER 'root'@'localhost' IDENTIFIED BY '456789'; # 添加远程登录用户 CREATE USER 'test'@'%' IDENTIFIED WITH mysql_native_password BY '456789'; GRANT ALL PRIVILEGES ON *.* TO 'test'@'%'; # 刷新权限 # flush privileges; FLUSH PRIVILEGES; # 增加root用户的远程连接权限并指定密码 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '456789'; # 更新权限 flush privileges; ## 解决认证插件错误 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '456789'; flush privileges; #一般到这里就可以链接了 #因为现在是新版本8.0了 ,老版本的修改密码的语法已不再适用,mysql 5.7.9以后废弃了password字段和password()函数; #新版本的密码修改可以通过如下命令操作: use mysql; ALTER user 'root'@'localhost' IDENTIFIED BY 'newpassward' #-- 注意,这里的密码要用包含8位大写+小写+特殊字符+数字的密码 ALTER user 'root'@'%' IDENTIFIED BY 'shenma@521' FLUSH PRIVILEGES;指定配置文件和数据存放位置#创建本机数据和配置,日志等文件夹 mkdir -vp /server/mysql cd /server/mysql mkdir data logs conf #复制配置文件 docker cp mysql-test:/etc/mysql /server/mysql/conf #复制data文件 docker cp mysql-test:/var/lib/mysql /server/mysql/data #停止并删除容器 docker stop mysql-test docker rm -f mysql-test #重新启动容器 docker run -d -p 3306:3306 \ --name mysql \ --privileged=true \ --restart=unless-stopped \ -v /server/mysql/conf/mysql/conf.d:/etc/mysql/conf.d \ -v /server/mysql/logs:/var/log/mysql \ -v /server/mysql/data/mysql:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:latest
查看详情点赞1评论收藏浏览682023-05-11 20:40:55Linux Docker 安装Nginx
Docker库地址https://hub.docker.com/1.自动安装dockercurl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun #开机启动: systemctl enable docker2、手动安装docker,并拉镜像,运行进行测试教程地址:https://www.runoob.com/docker/centos-docker-install.html#查看docker版本 docker --version #启动 systemctl start docker systemctl restart docker #卸载: yum remove docker-ce docker stats --help #进入容器: docker exec -it nginx /bin/bash docker exec -it 7697977d2d88 /bin/bash #拉最新的Nginx docker pull nginx:latest #查看镜像 docker images #测试镜像 sudo docker run --name nginx -p 9091:80 -d nginx:latest docker ps //查看IP ifconfig http://192.168.0.1:90913、容器部署#本机创建目录,用于容器Nginx挂载出来出来 # 创建网站目录 mkdir -p /server/nginx/html # 创建日志目录 mkdir -p /server/nginx/logs # 创建配置目录 mkdir -p /server/nginx/conf ## 拷贝配置文件 docker cp nginx:/etc/nginx/nginx.conf /server/nginx/conf/nginx.conf docker cp nginx:/etc/nginx/conf.d /server/nginx/conf/conf.d ## 拷贝完配置文件后需要把测试运行的容器停掉,然后再删除容器 docker stop nginx docker rm nginx ## 如果因为权限问题,需要加上--privileged=true这个参数 ## 映射、挂载容器目录,启动容器 docker run -d -p 80:80 -p 443:443 --name nginx -v /server/nginx/html:/usr/share/nginx/html -v /server/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /server/nginx/logs:/var/log/nginx -v /server/nginx/conf/conf.d:/etc/nginx/conf.d --privileged=true nginx:latest #或者 docker run -d -p 80:80 -p 443:443 --name nginx \ -v /server/nginx/html:/usr/share/nginx/html \ -v /server/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /server/nginx/conf/conf.d:/etc/nginx/conf.d \ -v /server/nginx/logs:/var/log/nginx \ --restart=always nginx #新建测试test.conf server { listen 80; server_name 192.168.0.1; location / { #注意这里的root目录是容器的网站目录 root /usr/share/nginx/www_test_com; index index.html index.htm; } location /api/ { proxy_pass http://192.168.0.1:8080/; } } # 移动copy的conf.d目录中的文件到正确的位置: mv /mydata/nginx/conf.d/* /mydata/nginx/conf/conf.d /到这里Nginx就配置好了
查看详情点赞1评论收藏浏览922023-05-11 20:33:28工作小技巧集锦
1、wap端滑动时侧边栏隐藏//aside需添加transition属性 $('body').on('touchmove', function (event) { $('aside').css('right','-1rem') }) $('body').on('touchend', function (event) { $('aside').css('right','0') })2、less 循环背景图.Loop(@index) when(@index<=8) { // 执行内容 // 类名参数要加大括号@{index} // 根据index获取对应的某个值 extract(数组名, 对应的序号) &:nth-child(@{index}) { background-image: url("../images/aj_bg0@{index}.png"); } //递归调用 达到循环目的 .Loop(@index+1); } // 调用循环 .Loop(0);3、vscode正则匹配</span>(\s*(?=\r?))<span> ———— 匹配标签间的所有空白字符 (?<!link rel="stylesheet") href="([\w\W]+?)" ———— 匹配所有href=""的内容,除了link rel="stylesheet"4、css限制显示行数,超出部分加上...chrome.textRow(@row) { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: @row; //需要显示时文本行数 overflow: hidden; }ie兼容 // 处理多行文本超出部分隐藏 function wordLimit(cName, wordLength) { var cName = document.getElementsByClassName(cName); for (var i = 0; i < cName.length; i++) { var nowHtml = cName[i].innerHTML; var nowLength = cName[i].innerHTML.length; if ( nowLength > wordLength) { cName[i].innerHTML = nowHtml.substr(0, wordLength) + '…'; } } };5、样式重置小问题移动端样式重置需要加上font-size,不然会有默认字体大小*{ font-size: 0.24rem }6、axios的post请求axios的post请求,默认是以application/x-www-form-urlencoded发送的,而一般接口接收都只能接收application/json,因此传输的data数据需要通过qs.stringify进行转换(前提是需先安装qs并引入)axios.create({ method: 'POST', url: '***', headers: { 'content-type': 'application/x-www-form-urlencoded' }, data: qs.stringify(data) })7、css竖排文字兼容问题准备做一个数字在框里自增的效果,需要用到文字竖排显示,原本用的writing-mode:lr-tb,实践发现存在兼容性问题,然后设置宽度文字并没有自动换行,因此只能用笨办法,内容里添加br标签达到目的8、通过正则将内容换成*,保留头和尾str.replace(/^(.).*(.)$/, '$1***$2')9、axios携带cookie的方法 封装的js里添加axios.defaults.withCredentials = true 这个属性,这样发请求时会自动携带cookie,但是需要后端在接口配置上允许携带cookie才能生效10、合理使用props中的值的方法如果props中的值涉及到多次更改,而调用他的值又是个对象的话,应该把对象放到computed中,否则没有办法实时监听props: { value: { type: String }, code: { type: String, default: 'cform_picture_control' }, ownId: { type: String, default: 'f3e28bd96ea2b32b361bd3e4690a1f6' }, selectType: { type: String, default: 'primary' }, portrait: { type: Boolean, default: false }, preview: { type: Boolean, default: true }, deleted: { type: Boolean, default: false }, limit: { type: Number, default: 10 }, exclude: { type: String, default: '' } }, //放到data中会监听不到后面的变化 data() { return { attrs:{ code: this.code, ownId: this.ownId, // 业务id selectType: this.selectType, portrait: this.portrait, // extendCode: '', //autoUpload: false, //preview: true, download: true, dragSort: true, limit: Number(this.limit), exclude: this.exclude, preview: this.preview, deleted: this.deleted } } }, // computed中才会实时监听变化 computed: { attrs() { return { code: this.code, ownId: this.ownId, // 业务id selectType: this.selectType, portrait: this.portrait, // extendCode: '', //autoUpload: false, //preview: true, download: true, dragSort: true, limit: Number(this.limit), exclude: this.exclude, preview: this.preview, deleted: this.deleted }; } },
查看详情点赞1评论收藏浏览1122023-05-04 16:03:05phpStorm 安装及破解
phpStorm,这是一款功能十分强大的专业编程工具软件,而这次小编为大家分享的版本是PhpStorm系列中最新的一个版本,而且经过了汉化破解,界面完全显示中文界面,软件本身是完美的支持xml、json、html、css、JavaScrip等系列的代码的,可以进行一系列的编程工作~一、进入官网,下载最新版软件下载地址: https://www.jetbrains.com/phpstorm/1、下载本站提供的压缩包,得到jetbrains phpstorm 2023原程序,双击它开始安装。2、选择软件安装位置,点击Browser可自行更换安装路径。3、选择附加任务,自行选择需要的进行勾选。4、选择开始菜单文件夹,默认即可。5、正在安装中,请耐心等待一会。6、安装成功,点击Finish退出软件安装向导。二、破解百度搜索phpStorm最新版注册码,见下面博主链接,亲测可用。我用的是2023版,最新获取激活码如下,不行再根据下面链接重新获取(不是打广告,只是正好搜索可以用)FDXL1Y2811-eyJsaWNlbnNlSWQiOiJGRFhMMVkyODExIiwibGljZW5zZWVOYW1lIjoiQmVub2l0IE1lbmVuZGV6IiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IiIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiRFBOIiwiZmFsbGJhY2tEYXRlIjoiMjAyMy0wMy0yNyIsInBhaWRVcFRvIjoiMjAyNC0wMy0yNiIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiREIiLCJmYWxsYmFja0RhdGUiOiIyMDIzLTAzLTI3IiwicGFpZFVwVG8iOiIyMDI0LTAzLTI2IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJQUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjMtMDMtMjciLCJwYWlkVXBUbyI6IjIwMjQtMDMtMjYiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IklJIiwiZmFsbGJhY2tEYXRlIjoiMjAyMy0wMy0yNyIsInBhaWRVcFRvIjoiMjAyNC0wMy0yNiIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUlNDIiwiZmFsbGJhY2tEYXRlIjoiMjAyMy0wMy0yNyIsInBhaWRVcFRvIjoiMjAyNC0wMy0yNiIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJHTyIsImZhbGxiYWNrRGF0ZSI6IjIwMjMtMDMtMjciLCJwYWlkVXBUbyI6IjIwMjQtMDMtMjYiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IkRNIiwiZmFsbGJhY2tEYXRlIjoiMjAyMy0wMy0yNyIsInBhaWRVcFRvIjoiMjAyNC0wMy0yNiIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUlNGIiwiZmFsbGJhY2tEYXRlIjoiMjAyMy0wMy0yNyIsInBhaWRVcFRvIjoiMjAyNC0wMy0yNiIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJEUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjMtMDMtMjciLCJwYWlkVXBUbyI6IjIwMjQtMDMtMjYiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlBDIiwiZmFsbGJhY2tEYXRlIjoiMjAyMy0wMy0yNyIsInBhaWRVcFRvIjoiMjAyNC0wMy0yNiIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUkMiLCJmYWxsYmFja0RhdGUiOiIyMDIzLTAzLTI3IiwicGFpZFVwVG8iOiIyMDI0LTAzLTI2IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJDTCIsImZhbGxiYWNrRGF0ZSI6IjIwMjMtMDMtMjciLCJwYWlkVXBUbyI6IjIwMjQtMDMtMjYiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IldTIiwiZmFsbGJhY2tEYXRlIjoiMjAyMy0wMy0yNyIsInBhaWRVcFRvIjoiMjAyNC0wMy0yNiIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUkQiLCJmYWxsYmFja0RhdGUiOiIyMDIzLTAzLTI3IiwicGFpZFVwVG8iOiIyMDI0LTAzLTI2IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJSUzAiLCJmYWxsYmFja0RhdGUiOiIyMDIzLTAzLTI3IiwicGFpZFVwVG8iOiIyMDI0LTAzLTI2IiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJSTSIsImZhbGxiYWNrRGF0ZSI6IjIwMjMtMDMtMjciLCJwYWlkVXBUbyI6IjIwMjQtMDMtMjYiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IkFDIiwiZmFsbGJhY2tEYXRlIjoiMjAyMy0xMi0zMSIsInBhaWRVcFRvIjoiMjAyNC0wMy0yNiIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUlNWIiwiZmFsbGJhY2tEYXRlIjoiMjAyMy0wMy0yNyIsInBhaWRVcFRvIjoiMjAyNC0wMy0yNiIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJEQyIsImZhbGxiYWNrRGF0ZSI6IjIwMjMtMDMtMjciLCJwYWlkVXBUbyI6IjIwMjQtMDMtMjYiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlJTVSIsImZhbGxiYWNrRGF0ZSI6IjIwMjMtMDMtMjciLCJwYWlkVXBUbyI6IjIwMjQtMDMtMjYiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IkRQIiwiZmFsbGJhY2tEYXRlIjoiMjAyMy0wMy0yNyIsInBhaWRVcFRvIjoiMjAyNC0wMy0yNiIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQREIiLCJmYWxsYmFja0RhdGUiOiIyMDIzLTAzLTI3IiwicGFpZFVwVG8iOiIyMDI0LTAzLTI2IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBXUyIsImZhbGxiYWNrRGF0ZSI6IjIwMjMtMTItMzEiLCJwYWlkVXBUbyI6IjIwMjQtMDMtMjYiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUFNJIiwiZmFsbGJhY2tEYXRlIjoiMjAyMy0xMi0zMSIsInBhaWRVcFRvIjoiMjAyNC0wMy0yNiIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQUFMiLCJmYWxsYmFja0RhdGUiOiIyMDIzLTAzLTI3IiwicGFpZFVwVG8iOiIyMDI0LTAzLTI2IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBDV01QIiwicGFpZFVwVG8iOiIyMDI0LTAzLTI2IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBHTyIsImZhbGxiYWNrRGF0ZSI6IjIwMjMtMDMtMjciLCJwYWlkVXBUbyI6IjIwMjQtMDMtMjYiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUFBDIiwiZmFsbGJhY2tEYXRlIjoiMjAyMy0wMy0yNyIsInBhaWRVcFRvIjoiMjAyNC0wMy0yNiIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQUkIiLCJmYWxsYmFja0RhdGUiOiIyMDIzLTAzLTI3IiwicGFpZFVwVG8iOiIyMDI0LTAzLTI2IiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBTVyIsImZhbGxiYWNrRGF0ZSI6IjIwMjMtMTItMzEiLCJwYWlkVXBUbyI6IjIwMjQtMDMtMjYiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUlMiLCJmYWxsYmFja0RhdGUiOiIyMDIzLTAzLTI3IiwicGFpZFVwVG8iOiIyMDI0LTAzLTI2IiwiZXh0ZW5kZWQi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破解方法转载: https://www.ajihuo.com/php/4962.html
查看详情点赞1评论收藏1浏览1552023-05-04 14:55:28laravel任务调度定时任务时间设置
时间设置举例:$schedule->command(‘CommandTask’)->dailyAt("5:20");->cron(’* * * * * *’); //在自定义的 Cron 时间表上执行该任务 ->everyMinute(); //每分钟执行一次任务 ->everyFiveMinutes(); //每五分钟执行一次任务 ->everyTenMinutes(); //每十分钟执行一次任务 ->everyFifteenMinutes(); //每十五分钟执行一次任务 ->everyThirtyMinutes(); //每半小时执行一次任务 ->hourly(); //每小时执行一次任务 ->hourlyAt(18); //每小时的第 18 分钟执行一次任务 ->daily(); //每天午夜执行一次任务 ->dailyAt('13:00'); //每天的 13:00 执行一次任务 ->twiceDaily(2, 14); //每天的 2:00 和 14:00 分别执行一次任务 ->weekly(); //每周执行一次任务 ->monthly(); //每月执行一次任务 ->monthlyOn(5, '20:00'); //在每个月的第5天的 20:00 执行一次任务 ->quarterly(); //每季度执行一次任务 ->yearly(); //每年执行一次任务 ->timezone('America/New_York'); //设置时区
查看详情点赞评论收藏浏览582023-04-21 11:11:57踩过的坑
1、路由跳转变量修改问题想实现根据路由名称的不同修改变量registerRoute的状态,从而通过这个变量来控制某一组件的显示与隐藏因为是在模板文件中添加的,先直接尝试将data中变量设置为registerRoute:this.$route.name === 'gszc'?true:false,然后发现行不通,因为模板文件中路由跳转时页面未刷新,因此data中值的改变并不会立即更新视图,所以需要将修改的方法放在updated钩子函数中,如此点击链接跳转路由时视图就会立即更新了... updated(){ this.registerRoute = this.$route.name === 'gszc'?true:false }2、mand mobile中swiper组件事件监听问题如果要给swiper内部的元素添加事件监听,需要在md-swiper标签上添加is-prevent="false",因为他默认为true,不设置的话将会阻止默认的事件3、elementUI中el-select传值为对象的问题业务有一个添加和编辑表单的功能,后端要求通过表单接收两个值,一个部门ID一个部门名字,且要求这俩值与其他属性平级,因此将select的option的value绑为一个对象,在提交的方法里再将value的值取出,放入表单的对象中进行传值,el-select中识别对象的标识仅需要添加value-key即可,添加功能没啥问题编辑时需要接受后端传来的值,我本来的想法是将接收到的值处理成和option绑定value一样的对象,但发现死活渲染不上,然后通过console比对俩对象,发现根本不相等,接着就想到根据接收到的部门ID获取当前部门在options数组中的下标,然后将数组中对应下标的对象绑定到v-model,这样就能成功渲染了4、父级html给子级iframe传值跨域问题父级使用PostMessage传值给子document.getElementById('iframe').contentWindow.postMessage('message', '*') //message为传过去的数据,字符串、对象、数组均可,*代表任意域名子级使用window.addEventListener接受数据window.addEventListener('message', function(e){ console.log(e.data) })由于子级iframe加载较慢,使用PostMessage发送数据时要等子级加载完成后方能发送,否则发过去子级也接收不到,因此需要将代码写在window.onload中(此bug困扰我接近1天,实在不应该)5、vue中关于路由拦截与组件生命周期的顺序问题router.beforeEach会比组件的周期先执行,我在组件的destroyed周期中执行了函数,本以为会是它先销毁再执行路由拦截中的方法,没想到是先执行路由拦截的方法,再执行组件的生命周期路由跳转时组件之间的生命周期顺序,先执行to组件的beforeCreate,created,beforeMount以后再执行from组件的destroyed,接着才是to组件的mounted6、vue项目中的代理配置问题vue2的代理配置在vue.config.js中,配置好后axios的baseUrl路径也应该改成'/api'(如果代理配置的前缀是/api的话),如果baseUrl的路径为全路径的话代理将会不起作用7、点击提交按钮时页面刷新的问题提交按钮的button位于form标签中,没有加type,所以表单会执行提交操作,会刷新页面,需要给button加上type="button"阻止默认提交事件8、换行相关问题在内容中添加\n进行换行时,页面并未渲染\n字符,但也没有换行效果,这里需要给他的父级css加上white-space:pre-line属性,这样就可以生效了9、浏览器preview和response的值不一致浏览器会自动把response中的值转成JSON格式,再显示到preview中,然而JavaScript存在数字精度问题,因此当接口的值(例如id)是多位数字而不是字符串时,转换时会出现数字不一样的问题,因此要以response的值为准
查看详情点赞1评论1收藏浏览842023-04-11 14:24:14安装node-modules包出现的错误解决
安装包出现类似于Running postinstall script... 等错误Progress: resolved 566, reused 524, downloaded 0, added 0, done node_modules/.pnpm/registry.npmmirror.com+pngquant-bin@6.0.1/node_modules/pngquant-bin: Running postinstall script... node_modules/.pnpm/registry.npmmirror.com+gifsicle@5.2.0/node_modules/gif方案1.只需要找到对应的包名重新安装,在xxx.lock.yaml添加对应包名并锁定版本即可方案2.使用cnpm安装包再使用当前包命令安装一次即可,如yarn-lock,使用的yran,先用cnpm再用yarn
查看详情点赞评论收藏浏览1002023-04-11 09:37:58PHP 时间处理类Carbon的常见用法
Carbon是php中对时间的一个封装。在内部通过使用DateTime实现了很多简单的方法。比如Carbon::now来说,使用echo Carbon::now()->toDateTimeString()可以直接获取到当前时间。使用DateTime你可能会需要echo (new DateTime())->format('xxxxx')包括其他对时间的操作,增加、减少天/秒/分/月,时间比较等等。 // 获取当前时间 echo Carbon::now(); // 2022-07-04 17:37:18 // 获取当前时间戳 echo Carbon::now()->timestamp; // 时间戳格式化 echo Carbon::now()->timestamp(1656928928)->toDateTimeString(); // 2022-07-04 18:02:08 echo Carbon::now()->timestamp(1656928928)->toDateString(); // 2022-07-04 // 昨天 echo Carbon::yesterday(); // 2022-07-03 00:00:00 // 今天 echo Carbon::today(); // 22022-07-04 00:00:00 // 明天 echo Carbon::tomorrow(); // 2022-07-05 00:00:00 // 获取当前时间的固定格式 echo Carbon::now()->format('Y-m-d'); // 2022-07-04 // 获取当前时间是几号 echo Carbon::now()->day; // 4号 // 获取当前时间是第几月 echo Carbon::now()->month; // 7月 // 获取今年年分 echo Carbon::now()->year; // 2022年 // 获取当前时间的小时 echo Carbon::now()->hour; // 17点 // 获取当前时间的分钟 echo Carbon::now()->minute; // 50分 // 将carbon对象转换成string类型 echo Carbon::now()->toDateTimeString(); // 2022-07-04 17:59:05 echo Carbon::now()->toDateString(); // 2022-07-04 echo Carbon::now()->toFormattedDateString(); // Jul 4, 2022 echo Carbon::now()->toTimeString(); // 18:00:37 echo Carbon::now()->toDayDateTimeString(); // Mon, Jul 4, 2022 6:01 PM // 获取前一天的开始时间 echo Carbon::now()->yesterday()->startOfDay(); // 2022-07-03 00:00:00 // 获取前一天的结束时间 echo Carbon::now()->yesterday()->endOfDay(); // 22022-07-03 23:59:59 // 上一周开始时间 (星期一) echo Carbon::now()->previous()->startOfWeek(); // 2022-06-27 00:00:00 // 上一周结束时间 (星期天) echo Carbon::now()->previous()->endOfWeek(); // 2022-07-03 23:59:59 // 获取这周开始时间 echo Carbon::now()->startOfWeek(); // 2022-07-04 00:00:00 // 获取这周开始时间 echo Carbon::now()->endOfWeek(); // 2022-07-10 23:59:59 // 获取上一月的开始时间 echo Carbon::now()->subMonth(1)->startOfMonth(); // 2022-06-01 00:00:00 // 获取上一月的结束时间 echo Carbon::now()->subMonth(1)->endOfMonth(); // 2022-06-30 23:59:59 // 这个月的第一天开始时间 echo Carbon::now()->startOfMonth(); // 2022-07-01 00:00:00 // 这个月的最后一天结束时间 echo Carbon::now()->endOfMonth(); // 2022-07-31 23:59:59 // 获取上一年的开始时间 echo Carbon::now()->subYear(1)->startOfYear(); // 2021-01-01 00:00:00 // 获取上一年的结束时间 echo Carbon::now()->subYear(1)->endOfYear(); // 2021-12-31 23:59:59 // 今年开始时间 echo Carbon::now()->startOfYear(); // 2022-01-01 00:00:00 // 今年结束时间 echo Carbon::now()->endOfYear(); // 2022-12-31 23:59:59 // 获取今天是当年的第多少天 echo Carbon::now()->dayOfYear; // 185 // 获取今天是这个月的第几周 echo Carbon::now()->weekOfMonth; // 1 // 获取今天是当年的第多少周 echo Carbon::now()->weekOfYear; // 27 // 获取今天是当前的第几季度 echo Carbon::now()->quarter; // 3 // 获取当月天数 echo Carbon::now()->daysInMonth; // 31 // 根据日期计算年龄 echo Carbon::createFromDate(1995, 1, 1)->age; // 27
查看详情点赞1评论收藏1浏览542023-03-31 10:53:48个人博客又没多少人看,为什么还要坚持写?
在网上看了很多,都说自己搞的博客没人看,没人访问。10个博客9个夭折。首先说下为什么坚持写博客吧,对于我个人来说。写博客主要是是因为两点:第一点喜欢技术,第二点喜欢分享吧。最近想弄一个博客是因为学了Go语言,所以想自己搭个博客玩玩,不求多高的流量。自己发发文章,分享分享自己的东西。个人略懂一点SEO,算是一个皮毛,所以弄了博客以后,想着做做SEO,但是要到处找资料,这也算是一种成长吧。毕竟接触以前不关注的东西。我的博客技术栈:后端:go-zero + redis + mysql + sqlx,目前用的这些,后期可能尝试加一下消息队列(比如RabbitMq之类)前端:博客用的是nuxt3+Elment-plus,后台用的是vite3+vue3+ts+pinia+Elment-plus希望有机会一起交流!知乎链接:https://zhuanlan.zhihu.com/p/618294882
查看详情点赞3评论1收藏浏览1212023-03-30 21:32:54一些分享生活的文案
1.我们总以为生活欠我们一个“满意”,其实我们欠生活一个努力!2.性命中最值得欣慰的,莫过于一觉醒来,你发现太阳还在,你还活着,周围的一切依旧完美。3.愿你放下执着,放下不甘心,从今以后,只负责精彩自己的人生。往事不回头,未来不将就,你若盛开,清风自来;人生虽有终点,生命却是无涯,生活可以自然,生命却要认真。4.不要过于执着什么,终究你会发现很多你为之所动的东西,最后都辜负了你。最难的也是最重要的,并非是放下过去,而是学会重新开始。5.我们可以输在人生起跑点,但绝不能输在人生转折点。6.忙碌是幸福的,令我们没时间体会痛苦,奔波是快乐,使我们真实的感受生活,疲惫是享受,让我们无暇空虚,愿你的生活多姿多彩,永远开心!7.远方也好,附近也好,只要牵挂就好;平淡也好富贵也好,只要健康就好;电话也好,信息也好,经常记得骚扰就好!一条信息,愿你生活安好。8.无论是生活还是工作,如果你想得到对手的好感,或是希望他为你做事,最好的方法就是对他施以攻心术。给予他恩泽,让他百分百地信任你,这样他就会与你化干戈为玉帛,并忠心耿耿地跟着你。9.生活再不如人意,都要学会自我温暖和慰藉,给自己多一点欣赏和鼓励。我们的生存背景大多是冷色的,逼迫着我们在危机中奋进,在两难中抉择,在困惑中放弃。那些斑斑血泪与伤痕,部分是自我赋予的,本来活着就很难,何必在意那些身外的阻挠与非议?要懂得对自己好些,让自己的精神有一方暖色的栖息地。10.做一个简单的人,不为利益毁掉情谊,不因钱财坏了人品,对长辈尊重,对弱小爱护,实实在在,本本分分,上对得起天地,下对得起良心。做一个简单的人,心地善良,懂得感恩,用乐观的心态去生活,不抱怨不消极,爱惜自己的身体,注意自己的言行。11.人一生中会遇到不顺心的事,会碰到不顺眼的人,如果你不学会原谅,就会活得痛苦,活得累。原谅是一种风度,是一种情怀,它像一把伞,帮助你在雨季里行路。学会原谅,快乐至上。12.随缘,首先要知道世间一切都在因缘聚散无常变化中,爱恨顺逆荣辱皆不会长久,无可执持。苦乐齐受,悉从缘生,与其为结果大喜大悲,不如在前谨慎用心地取舍善恶。随缘是一方面尽心竭力,另一方面得失从缘。13.世无特立独行之蚁方方正正之沙。14.种自己的花,爱自己的宇宙。15.所有美好的事情都是值得等待的。 我是泰戈尔,与你一起,分享生活。
查看详情点赞1评论4收藏10644浏览1022023-03-30 20:59:06