• 解決済 Akemi

    (@akemimizuki)


    はじめまして。Akemiと申します。先月からPHP/WordPressを触りだした初心者ですが、よろしくお願いします。

    現在時刻から、例えば、先週の日曜日から先週の土曜日の投稿を取得するには、どう書くのがいいのでしょうか?
    最初、strtotime('last sunday -1 week')で問題ないかと思いましたが、それだとUTCで取得されるため、9時間のズレが生じることに気が付きました。
    そこで、以下のような処理で日付を取得して、一応動作は問題なく実装できたのですが、かなり冗長的で、先月や2週間前の投稿を取得といったときの処理を書くときも必要なため、少しめんどくさいと思いました・・

    $offset = intval(get_option('gmt_offset'));
    $date_time = new DateTime(date_i18n('Y-m-d H:i:s'));
    $hour = intval($date_time->format('H'));
    $day_of_the_week = $date_time->format('l');
    $start = strtotime('last sunday -1 week');
    $end = strtotime('last saturday');
    
    if ($day_of_the_week === 'Sunday') {
        $start = strtotime('last sunday');
        if ($hour < $offset) {
            $end = strtotime('this saturday');
        }
    } elseif ($day_of_the_week === 'Monday') {
        if ($hour < $offset) {
            $start = strtotime('last sunday');
        }
    }
    
     $start_date = date('Y-m-d 00:00:00', $start);
     $end_date = date('Y-m-d 23:59:59', $end);
     $wpdb->prepare("SELECT * .......);

    strtotime('last sunday Asia/Tokyo')だとUTCより-9時間の値が帰ってきますし、date_default_timezone_set('Asia/Tokyo') を設定して、処理後にタイムゾーンを戻すみたいのがいいのしょうか?
    タイムゾーンの設定は、wp-settings.phpで設定されているため、変更しないほうがベターだと思っています。
    よろしくお願いします。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック投稿者 Akemi

    (@akemimizuki)

    ついでで申し訳ないのですが、タイムゾーンにあった昨日を簡単に取得する方法ありますでしょうか?
    現在下記のように書いてますが、gmt_offsetを足すのはちょっとどうかと思い悩んでいます。

    $hour = get_option('gmt_offset');
    $yesterday = strtotime("now -1 day +{$hour} hours");
    $start = date('Y-m-d 00:00:00', $yesterday);
    $end = date('Y-m-d 23:59:59', $yesterday);

    こんにちは

    $args = array(
    	'post_type'		 => 'post',
    	'post_status'	 => 'publish',
    	'posts_per_page' => -1,
    	'date_query'	 => array(
    		array(
    			'inclusive'	 => true,
    			'after'		 => date( 'Y-m-d', strtotime( 'last sunday -1 week' ) ) ),
    		array(
    			'inclusive'	 => true,
    			'before'	 => date( 'Y-m-d', strtotime( 'last saturday' ) ) ),
    	)
    );
    $args	 = array(
    	'post_type'		 => 'post',
    	'post_status'	 => 'publish',
    	'posts_per_page' => -1,
    	'date_query'	 => array(
    		array(
    			'compare'	 => 'BETWEEN',
    			'inclusive'	 => true,
    			'after'		 => date( 'Y-m-d', strtotime( 'last sunday -1 week' ) ),
    			'before'	 => date( 'Y-m-d', strtotime( 'last saturday' ) ),
    		)
    	)
    );
    $query = new WP_Query( $args );
    
    foreach ( $query->posts as $v ) {
    
    	$html = '<p>%1$s  %2$s</p>';
    	printf( $html, $v->post_date, $v->post_title );
    }

    $argsは、どちらが良いのかわかりませんが、どちらでも取得できるようです。

    トピック投稿者 Akemi

    (@akemimizuki)

    nobitaさん、コメントありがとうございます!

    カスタムテーブルをjoinしてから、selectしているため、WP_Queryは使用していません・・
    また、date( 'Y-m-d', strtotime( 'last sunday -1 week' )のtimestampでは、UTCのtimestampなので、時差が生じるかと思います・・

    $date_time = new DateTime(date_i18n('Y-m-d'));
    $week_num = intval($date_time->format('w'));
    $date_time->sub(new DateInterval('P'.$week_num.'D'));
    $date_time->sub(new DateInterval('P1W'));
    
    $start_date = $date_time->format('Y-m-d 00:00:00');
    
    $date_time->add(new DateInterval('P6D'));
    
    $end_date = $date_time->format('Y-m-d 23:59:59');
    

    こんな感じでどうでしょうか。
    date_i18nを基準に足したり引いたりすれば、昨日の日付なども自由に出力できるかと思います。
    P6Dを足している箇所がなんとも言えない感じですが…P1Wを引いている箇所をP2Wにすれば、2週間前の範囲になります。

    また、date( ‘Y-m-d’, strtotime( ‘last sunday -1 week’ )のtimestampでは、UTCのtimestampなので、時差が生じるかと思います・・

    wp_query であれば、ちらっとチェックしましたが、大丈夫みたいでしたが、あとで確認してみます

    トピック投稿者 Akemi

    (@akemimizuki)

    x743さん、コメントありがとうございます!

    DateInterval というのがあるんですね!
    ちょっと見てみます。ありがとうございます!

6件の返信を表示中 - 1 - 6件目 (全6件中)

トピック「先週の投稿の取得について」には新たに返信することはできません。