问题背景,创建文章之后,觉得某些字词不妥,就更新了一下
然后刚才更新的文章打开直接出现404问题.
深究根源是时区问题导致的,要么更新的时候修改发布时间早于当前8小时(时区+8)问题

要么修改源码,直接html\typecho\var\Widget\Contents\Post\Edit.php
在347行 protected function getCreated(): int
其中的elseif (!empty($this->request->date))里面
改成

protected function getCreated(): int
{
    // 设置默认值
    $created = $this->options->time;
    if(!empty($this->request->date)) {
        // 从前端获取,新增或者修改的时候
        $created = strtotime($this->request->date)-$this->options->timezone;
    } elseif ($this->have() && $this->created > 0) {
        //如果是修改文章
        $created = strtotime($this->request->date)-$this->options->timezone;
    } elseif ($this->request->is('do=save')) {
        // 如果是草稿而且没有任何输入则保持原状
        $created = 0;
    }

    return $created;
}

解决修改文章之后出现404问题

修改时间类
typecho/var/Typecho/Date.php

public function __construct(?int $time = null)
{
    $this->timeStamp = (null === $time ? self::time() : $time);

    $this->year = date('Y', $this->timeStamp);
    $this->month = date('m', $this->timeStamp);
    $this->day = date('d', $this->timeStamp);
}


public static function setTimezoneOffset(int $offset)
{
    self::$timezoneOffset = $offset;
    // self::$serverTimezoneOffset = idate('Z');
}

public function word(): string
{
    return I18n::dateWord($this->timeStamp, self::time() );
}

修改之后,Typecho里面的时间函数就必须依赖Linux主机的时间了,所以主机时间请设置准确,同时typecho里面也必须设置相对应的时区,避免其他插件时区混乱

标签: none

添加新评论