分类 编程语言 下的文章

python获取本周(上周)本月(上月)开始时间以及结束时间

导包

import time
import datetime

获取当前日期

today = datetime.date.today()

本周的开始以及结束日期

# 开始日期
today - datetime.timedelta(days=today.weekday()+7)
# 结束日期
today - datetime.timedelta(days=today.weekday()+1)

上周的开始日期以及结束日期

# 获取当前日期 
date = datetime.datetime.now()
# 上周开始时间
date-datetime.timedelta(days=date.weekday()+7)
# 上周结束时间
date-datetime.timedelta(days=date.weekday()+1)

本月开始以及结束日期

# 获取当前日期 
date = datetime.datetime.now()
year = date.year
month = date.month
# 开始日期
start = datetime.date(year, month, 1)
#结束日期
if month == 12:
    end = datetime.date(year+1, 1, 1) - datetime.timedelta(days=1)
else:
    end = datetime.date(year, month+1, 1) - datetime.timedelta(days=1)

上个月的开始以及结束日期

# 获取当前日期 
date = datetime.datetime.now()
year = date.year
month = date.month
if month == 1:
    start = datetime.date(year-1, 12, 1)
else:
    start = datetime.date(year, month-1, 1)
end = datetime.date(year, month, 1) - datetime.timedelta(days=1)

小程序的全局存储可以存储在本地的Storage里面,也可以存储在内存中globalData。下面小编说的这种情况是存储在内存中的方式,也就是存储在globalData里面的。
[scode type="blue"]初始化数据[/scode]
首先需要初始化数据app.globalData,因为是全局存储的,所以我们只需要在app.js里面进行初始化即可。

App({
   ......
    globalData: {
        user: null
    }
})

[scode type="blue"]存储数据[/scode]

// 首先需要在引用的文件里获取APP
const app = getApp();
// 赋值
app.globalData.user = this.data.user;

[scode type="blue"]使用数据[/scode]

// 首先需要在引用的文件里获取APP
const app = getApp();
// 获取
let user = app.globalData.user;

681f43ff226e4d84bdb2fd92fd557faa_th.jpeg

本来呢想封装成一个组件的,但是呢代码不是很多就直接拿过来用吧。主要用与轮番显示公告,并且如果公告文字太长就会显示为省略号,是不是很好用呢。小编现在已经习惯吧样式写在接口里面了,入股不喜欢,那么你就拆出去吧。这也是最近被一个很厉害的人带的,小编之前总是会把样式单独写的。
上代码吧。哈哈哈哈
11.jpeg
wxml:

 <view style="display:flex;align-items:center;height: 70rpx;background:#FFFFFF;padding: 10rpx 20rpx;">
        <image src="https://www.sunxiaoning.com/usr/uploads/2019/03/3616970405.jpeg;height:50rpx" />
        <swiper style="width:90%;height: 55rpx;padding-left:10rpx;display:flex;align-items:center;" vertical="true" autoplay="true" circular="true" interval="2000">
            <block wx:for="{{msgList}}">
                <navigator url="/pages/index/index" open-type="navigate">
                    <swiper-item style="display:flex;align-items:center;">
                        <view style="font-size: 25rpx;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;letter-spacing: 2px;">{{item.title}}</view>
                    </swiper-item>
                </navigator>
            </block>
        </swiper>
    </view>

js代码

 this.setData({
                    msgList: [{
                        title: "小宁博客"
                    },
                    {
                        title: "小宁博客-孙肖宁的个人博客"
                    },
                    {
                        title: "小宁博客-孙肖宁的个人博客;小宁博客-孙肖宁的个人博客"
                    }
                    ]
                });

大家可能疑惑了,微信小程序有自己的showMode,而且API十分的完善,为啥还要自己封装呢?难道自带的有bug?小编会告诉你No。因为微信小程序自带的showModel是固定的,只能用显示文字,如果你想显示表单,并且用户可以输入,那么微信小程序自带的就不能使用了吧,一般就是再写个输入界面,那多麻烦啊,还不如自己封装一个showMode的组件呢。下面小编给大家看下小编怎么做的。仅供参考哈。
首先是wxml:

<view class='mask' wx:if='{{show}}'>
    <view class='modal-content'>
        <view class="title">{{title}}</view>
        <slot></slot>
        <view class='modal-btn-wrapper'>
            <view class='cancel-btn' bindtap='cancel' wx:if="{{showCancel}}" style="color:{{cancelColor}}">{{cancelText}}</view>
            <view class='confirm-btn' bindtap='confirm' style="color:{{confirmColor}}">{{confirmText}}</view>
        </view>
    </view>
</view>

样式wxss:

.mask {
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    display: flex;
    justify-content: center;
    align-items: center;
    background-color: rgba(0, 0, 0, 0.4);
    z-index: 9999;
}

.modal-content {
    display: flex;
    flex-direction: column;
    width: 85%;
    padding: 10rpx;
    background-color: #fff;
    border-radius: 15rpx;
}

.title {
    font-size: 40rpx;
    text-align: center;
    padding: 15rpx;
}

.modal-btn-wrapper {
    display: flex;
    flex-direction: row;
    height: 100rpx;
    line-height: 100rpx;
    border-top: 2rpx solid rgba(7, 17, 27, 0.1);
}

.cancel-btn, .confirm-btn {
    flex: 1;
    height: 100rpx;
    line-height: 100rpx;
    text-align: center;
    font-size: 32rpx;
}

.cancel-btn {
    border-right: 2rpx solid rgba(7, 17, 27, 0.1);
}

.main-content {
    flex: 1;
    height: 100%;
    overflow-y: hidden;
}

然后是js

Component({

    /**
     * 组件的属性列表
     */
    properties: {
        title: {
            type: String,
            value: '提示'
        },

        //是否显示取消按钮
        showCancel: {
            type: Boolean,
            value: true
        },
        //取消按钮文字
        cancelText: {
            type: String,
            value: '取消'
        },
        //取消按钮颜色
        cancelColor: {
            type: String,
            value: '#000000'
        },
        //确定按钮的文字
        confirmText: {
            type: String,
            value: '确定'
        },
        //确定按钮的颜色
        confirmColor: {
            type: String,
            value: '#576B95'
        },
        //是否显示modal
        show: {
            type: Boolean,
            value: false
        },
    },

    /**
     * 组件的初始数据
     */
    data: {

    },

    /**
     * 组件的方法列表
     */
    methods: {
        // 取消函数
        cancel() {
            this.setData({
                show: false
            })
            this.triggerEvent('cancel')
        },
        // 确认函数
        confirm() {
            this.setData({
                show: false
            })
            this.triggerEvent('confirm')
        }
    }
})

最后搞定:
model.png

首先你需要在你要实现的界面里面的json配置文件里面填一个配置:"enablePullDownRefresh": true允许该页面下拉刷新,上拉加载。
然后在你的js文件中实现你的方法就可以了。
这两个方式主要是你上拉和下拉的时候执行的,里面的逻辑还是需要自己去实现。

   // 页面下拉刷新的时候执行
   onPullDownRefresh: function () {
    
   },

   // 页面上拉触底事件(上拉加载更多)
   onReachBottom: function () {
      
   },

一般做法是,在你的页面里面写一个加载数据的方法,在onload或者onshow的时候调用。所以下拉刷新的时候只需要你再重新调用这个方法就可以,不过要把里面的值清空。而在上拉加载的时候,就是把数据使用concat方法进行追加。具体业务实现还要服务端的分页。不会的可以给小编留言哦。

微信小程序也是可以引导用户关注公众号的,不过呢使用场景很严格,大家使用的时候注意一下哦。该组件限定最小宽度为300px,高度为定值84px。

代码片段:

<official-account></official-account>

使用前提:

  • 小程序和公众号必须同一主体。
  • 小程序打开的场景值:扫小程序码场景(场景值1047,场景值1124),从聊天顶部场景(场景值1089)中的「最近使用」内打开,从其他小程序返回小程序(场景值1038)时,若小程序之前未被销毁,则该组件保持上一次打开小程序时的状态,扫二维码(场景值 1011)打开 体验版小程序打开,总之场景值有(1011, 1124, 1047, 1089, 1038)
  • 用户未关注公证号。
  • 每个页面只能使用一次。
  • 公众号关注组件,场景值为1089(从聊天顶部)不显示

测试环境使用方法

在开发者工具中,编译的时候选择通过二维码编译,选择小程序二维码,进入就可以了。小编发现通过改变场景值是不管用的。

timg.jpeg

python列表中添加元素的方法主要有:append(),extend(), insert()。这三个方法都可以向列表中添加元素,通过参数可以也能实现相同的结果,但是这三个方法的使用是不一样的,参数也是不一样的。各自有各自的使用场景。

  1. append() 追加单个元素到List的尾部,只接受一个参数,参数可以是任何数据类型,被追加的元素在List中保持着原结构类型。
    例如:

    list1 = [1,2,3,4]
    list2 = [4,5,6,7]
    list1.append(list2)
    # 得到的结果是[1,2,3,4[4,5,6,7]]
  2. extend() 将一个列表中每个元素分别添加到另一个列表中,只接受一个参数。
    例如:

    list1 = [1,2,3,4]
    list2 = [4,5,6,7]
    list1.extend(list2)
    # 得到的结果是[1,2,3,4,4,5,6,7]
  3. insert() 将一个元素插入到列表中,但其参数有两个,第一个参数是索引点,即插入的位置,第二个参数是插入的元素。
    例如:

    list1 = [1,2,3,4]
    list2 = [4,5,6,7]
    list1.insert(1, list2)
    # 得到的结果是[1,4,5,6,7,2,3,4]

小程序输入框placeholder如何设置位置居右
方法1:
text-align:right 这样设置,你输入的时候也是从右侧开始输入的。

方法2:
placeholder-style='text-align:right' 这样设置placeholder的提示是在右边,但是你输入的时候还是从左侧输入。
1-1F9161A2093M.jpg

首先说一下,mac本身已经安装了python2,小编默认的是python2.7.10,所以不需要再安装python2了。接下来我们在不卸载python2的基础上安装python3.
其实呢也非常的简单,只需要安装一个Homebrew套件管理工具就可以了。安装也很简单,就是下载的很慢,可能会安装失败,

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

或者更换下国内的源,这两个命令执行一个就可以:

ruby-e"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 

安装之后此时一下:brew doctor,如果出现Your system is ready to brew.就代表安装成功了。

然后我们安装python3

brew install python3

安装之后:
采用终端运行:

python //将运行默认的2.7版本
python3 //将运行新安装的3.x版本

安装第三方包:

pip //将安装默认的2.7版本的包
pip3 //将安装3.x版本的包

哈哈,小编今天用python写了第一个爬虫,现在和大家分享一下,其实呢爬虫就是模拟了我们使用浏览器发送http请求,自动的批量的获取我们需要的资源,然后把获取到的资源处理下。得到我们想要的数据。小编呢这里使用的事python3,并且安装了一个依赖包requests,需要的话自己可以安装一个哦。小编这个爬虫写的比较的简单,就是爬取基本的网页,没有太高的技术水准。下面说下开发的步骤吧。
步骤:

  • 分析要爬出的网页的结构
  • 下载数据
  • 处理数据
  • 数据持久化

程序源码

import requests
import re

# 需要爬取网页的地址
url = 'https://###'

# 模拟一个http的请求
response = requests.get(url)
# 设置请求回来之后的字符串的编码格式,这个根据的事你爬取网页的编码保持一致
response.encoding = 'gbk'
# 爬取网页的源码
html = response.text
# 获取小说名称,这个需要结合你爬取的网页内容来定
title = re.findall(r'<meta property="og:novel:book_name" content="(.*?)"/>', html)[0]
# 新建一个文本来保存爬取到的数据,并且用小说名称来命名,设置编码格式
fb = open('%s.txt' % title, 'w', encoding='utf-8')

# 获取小说章节列表(根据爬取的网页数据来定)
dl = re.findall(r'<div id="list">.*?</div>', html, re.S)[0]
chapter_info_list = re.findall(r'href="(.*?)"(.*?)<', dl)

# 取出小说名称以及URL,并获取小说的章节内容
for chapter_info in chapter_info_list:
    # 取出小说名称以及URL
    chapter_url, chapter_title = chapter_info
    # 拼接章节完整的URL
    chapter_url = "%s%s" % (url,chapter_url)
    # 获取小说内容
    chapter_response = requests.get(chapter_url)
    chapter_response.encoding = 'gbk'
    chapter_html = chapter_response.text
    # 处理获取到的数据
    chapter_content = re.findall(r'<div id="content" name="content">(.*?)</div>', chapter_html, re.S)[0]
    chapter_content = chapter_content.replace(' ', '')
    chapter_content = chapter_content.replace('&nbsp;', '')
    chapter_content = chapter_content.replace('<br />', '')
    chapter_content = chapter_content.replace('<br/>', '')

    # 把数据存储到文本文件中
    fb.write(chapter_title)
    fb.write(chapter_content)
    fb.write('\n')
    print(chapter_url)

print("======end======")