post.date.year取值错误

Hi Hepo,

新年好呀!

今天发现一个问题,就是跨到2020年之后,日志的年份计算有问题。

在代码中

oldest\_post = d.get\_data(types='post', return\_one=true, sort='asc') 
latest\_post = d.get\_data(types='post', return\_one=true, sort='desc')
year\_oldest = oldest\_post.date.year
year\_latest = latest\_post.date.year
span= latest\_post.title
span= latest\_post.date
span= latest\_post.date.year

但是html渲染出来是

2020-01-01 2020-01-01 00:00 2019 

为啥date是正确但date.year却出现了问题呢?

页面:https://potatorib.tk/archive/  

谢谢,

2020-01-01 13:41 from Liu Zheng
Comments
Write a Comment
  • wellsleep reply

    好像只有1月1日的时间会出现年份划分混乱...除了用if语句来单独判断一下,还有别的好办法吗?

    • Hepo reply

      @wellsleep 用 post.date('%y') 来获取 year,因为存储的是 utc 时间,直接取 year,获得的是没有时区修正到+8时候的原始值。

      • wellsleep reply

        @Hepo 谢谢~ 但是应该怎么修正时区呢?

        翻了一下 pi.bitcron.com 里的问题解答,主页的 dashboard 里时区原本设的是8.0,是需要改模板吗?

        • Hepo reply

          @wellsleep 用post.date('%y') 来获取 year 就可以了,这是自动的。

          • wellsleep reply

            @Hepo 我大概明白了你的意思。不过由于在取全年日志数量的时候,迭代是不是还是只能用 utc 的时间来计数?

            好比

            https://potatorib.tk/archive/2017 这一页的代码是

            ```

            request_year = request.path.split('/')[-1]

            header.post-header

            h1.post-title= '这是 ' + request_year + ' 年干的傻事'

            section.post-content

            year_start_date = '%s-1-1'%request_year

            year_end_date = '%s-12-31'%request_year

            entries = get_data(type='post',limit=120, sort='desc', date_start=year_start_date, date_end=year_end_date).group('-date:year')

            for year, year_posts in entries

            .year

            span= year

            year_start_date = '%s-1-1'%year

            year_end_date = '%s-12-31'%year

            yearly_count = get_data(type='post', return_count=True, date_start=year_start_date, date_end=year_end_date)

            span.yearly_count= "(%s)"%yearly_count

            ul.posts_in_year: for post in year_posts: li

            span.date= post.date.format("%m/%d")

            a(href=post.url, title=post.title)= post.title

            ```

            year 的取值是迭代出来的,在 `.group('-date:post.date('%y')')` 这么来改也不对...

            • Hepo reply

              @wellsleep year_start_date = '%s-1-1 8:00'%year 试试,可能反向取值没有再做转义,直接用 utc 来查询了。

              • wellsleep reply

                反复测试了一下,似乎发现了原因。

                原来 2017-01-01 的日志由于是从 Wordpress 转换的,默认 metadata 是 2017-01-01 02:11:47+0000。如果改成 2017-01-01 02:11:47 效果相同,而如果改成 2017-01-01 10:11:47 分类就对了。

                所以原因应该是抓取文章默认按照 UTC 时间,而我们比较习惯东8区的时间。

                另外 year_start_date = '%s-1-1 8:00'%year 的办法没用,不知道是不是 date_start 不考虑小时的缘故...(话说抓出来是 02:11:47 也还是会被划到前一年吧?)

                多谢帮助!啥时候开放新版公测哇?