<script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
<script>
// 原理:
// 1. J_endtime 获取到期时间的时间戳
// 2. 将 J_endtime 转化为 datetime-local 格式,并赋值给 J_newtime 显示
// 3. 检测 J_newtime 值是否有改动
// 4. J_newtime 值有改动,则将其 value 转化为时间戳,并赋值给 J_endtime
// 说明:
// newtime.val(getDateTime(endtime));
// newtime.val() 是给 newtime 进行赋值
// 值为 getDateTime(endtime);endtime 是获取的数据库的值;getDateTime 是格式化时间戳为 datatime-local
//这个 getzf 作用是给 1一位数的时间加个前导0,2022-1-26 改成 2022-01-26
var times = $('.J_time');
if (times.length) {
$('.J_endtime').each(function() {
var endtime = $(this).val();
var newtime = $(this).parent().find('.J_newtime');
newtime.val(getDateTime(endtime));
});
}
$('.J_newtime').on('input propertychange', function() {
var newtime = $(this).val().replace('T', ' ').replace(/-/g, '/');
$('.J_endtime').val(Date.parse(newtime) / 1000);
});
// 将时间戳转化为 datetime-local 格式---------getzf(date.getSeconds()秒;
function getDateTime(str) {
var date = new Date(parseInt(str + '000'));
return date.getFullYear() + '-' + getzf(date.getMonth() + 1) + '-' + getzf(date.getDate()) + 'T' + getzf(date.getHours()) + ':' + getzf(date.getMinutes());
}
// 两位数的前导零
function getzf(num) {
if (parseInt(num) < 10) {
num = '0' + num;
}
return num;
}
</script>
SQL 语句中
asc是指定列按升序排列(即:从小到大排序) ---降序排列
desc则是指定列按降序排列(即:从大到小排序) ---升序排列
排序子句语法:order by 列名 asc/desc
例如:
<!--订单列表,降序需要排序一下-->
<select id="listOrderByUserId" resultType="VideoOrder">
select * from video_order where user_id = #{user_id} order by create_time desc
</select>
think-captcha
thinkphp5 验证码类库
安装
composer require topthink/think-captcha
使用
模板里输出验证码
<div>{:captcha_img()}</div>
或者
<div><img src="{:captcha_src()}" alt="captcha" /></div>
上面两种的最终效果是一样的
控制器里验证
使用TP5的内置验证功能即可
$this->validate($data,[
'captcha|验证码'=>'require|captcha'
]);
或者手动验证
if(!captcha_check($captcha)){
//验证失败
};
简介:
<?php
/**
* 支付宝支付
*/
return [
//应用ID,您的APPID。
'app_id' => "",
//商户私钥, 请把生成的私钥文件中字符串拷贝在此
'merchant_private_key' => "",
//异步通知地址
'notify_url' => "",
//同步跳转
'return_url' => "",
//编码格式
'charset' => "UTF-8",
//签名方式
'sign_type'=>"RSA2",
//支付宝网关
'gatewayUrl' => "https://openapi.alipay.com/gateway.do",
//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
'alipay_public_key' => "",
];
ThinkPHP5 支付宝支付扩展库, 包括手机网站支付、电脑网站支付、支付查询、退款、退款查询、对账单等。
用法
电脑网站支付 Pagepay.php
调用 \alipay\Pagepay::pay($params) 即可
手机网站支付 Wappay.php
调用 \alipay\Wappay::pay($params) 即可
交易查询接口 Query.php
调用 \alipay\Query::exec($query_no) 即可
交易退款接口 Refund.php
调用 \alipay\Refund::exec($params) 即可
退款统一订单查询 RefundQuery.php
调用 \alipay\RefundQuery::exec($params) 即可
交易关闭接口 Close.php
调用 \alipay\Close::exec($query_no) 即可
查询账单下载地址接口 Datadownload.php
调用 \alipay\Datadownload::exec($bill_type, $bill_date) 即可
验签 Notify.php
调用 \alipay\Notify::checkSign($params) 即可
<script type="text/javascript">
var order_id = $('.order_id').val();
setInterval(function() {
$.ajax({
type:"post",
url:"{:url('订单是否支付查询地址')}",
data:{order_id},
success:function(e){
//成功支付返回1 未支付返回 0
if(e){
window.location.href="支付成功跳转地址"
}
}
});
}, 1000);//1000 是1秒执行一次
</script>
<?php
$t=time();
echo "今天的日期时间戳是:".$t."";
echo "把时间戳转换成日期: " . date("Y-m-d H:i:s", $t);
?>
重命名文件
bool rename($旧名,$新名);
这个函数返回一个bool值,将旧的名字改为新的名字。
<?php
//旧文件名
$filename = 'test.txt';
//新文件名
$filename2 = $filename . '.old';
//复制文件
rename($filename, $filename2);
?>
我们打开目录,我们可以看看效果,你会发现把指定的文件,复制了一份到了目标路径。
复制文件
复制文件,就相当于是克隆技术,将一个原来的东西再克隆成一个新的东西。两个长得一模一样。
bool copy(源文件,目标文件)
功能:将指定路径的源文件,复制一份到目标文件的位置。
我们来通过实验和代码来玩玩:
<?php
//旧文件名
$filename = 'copy.txt';
//新文件名
$filename2 = $filename . '_new';
//修改名字。
copy($filename, $filename2);
?>
总结:
你会通过上面的例子,发现多出来了一个文件。
删除文件
删除文件就是将指定路径的一个文件删除,不过这个删除是直接删除。使用的是windows电脑,你在回收站看不到这个文件。
你只会发现,这个文件消失了。
bool unlink(指定路径的文件)
<?php
$filename = 'test.txt';
if (unlink($filename)) {
echo "删除文件成功 $filename!\n";
} else {
echo "删除 $filename 失败!\n";
}
?>