2009-07-05 3 views
1

Я не уверен, как это назвать. Но в основном я хочу, чтобы пользователь мог нажать «Популярные истории с этой недели», и он перенесет их на страницу, которая будет иметь другие материалы, но главным образом даты. Например, 10-17 июля.Использование даты PHP для отображения еженедельных дат

В настоящее время я использую этот код:

 
    $seven_days_ago = date('j') - 7; 
    $time_span = date('F ' . $seven_days_ago . ' - j'); 

Теперь, я столкнулся с проблемой, когда мы вошли в июле, потому что он будет отображать что-то вроде июля -3 - 4. Мне нужен способ для него, чтобы определить, является ли переменная семь дней назад отрицательной, и выяснить, что она должна отображать. Помогите?

Спасибо!

ответ

2

Вы можете использовать strtotime для этого:

$seven_days_ago = strtotime('-7 days'); 
$time_span = date('F j', $seven_days_ago) . ' - ' . date('F j'); 

выше дает мне "28 июня - 5 июля" для $time_span.

+0

Спасибо большое, все работает отлично! –

1

Что об использовании

$unix_timestamp = mktime(0, 0, 0, date("m"), date("d")-7, date("Y")); 

и просто взять возвращенное Отметка времени Unix?

Update

Просто немного кода пропущено, который даст вам полный рабочий пример. Однако мне не нравится, что много :)

<?php 
    $today = date("d F"); 
    list($today_day, $today_month) = explode(" ", $today); 
    $previous = date("d F", mktime(0, 0, 0, date("m"), date("d")-7, date("Y"))); 
    list($previous_day, $previous_month) = explode(" ", $previous);  
    if($today_month != $previous_month){ 
    echo $previous_month." ".$previous_day." - ".$today_month." ".$today_day; 
    }else{ 
    echo $today_month." ".$previous_day." - ".$today_day; 
    } 
    die(); 
?> 
1

вам нужно использовать strtotime

$timeago = strtotime("7 days ago"); 
0

я просто создал очень изящную маленькую функцию. Просто передайте ему номер недели, он вернет вам массив дат дня этой недели.

function findWeekDates($weekNumber=null, $year=null) { 
// receives a specific Week Number (0 to 52) and returns that week's day dates in an array. 
// If no week specified returns this week's dates. 
    $weekNumber = ($weekNumber=='') ? date('W'): $weekNumber ; 
    $year = ($year=='') ? date('Y'): $year ; 

    $weekNumber=sprintf("%02d", $weekNumber); 
    for ($i=1;$i<=7;$i++) { 
     $arrdays[] = strtotime($year.'W'.$weekNumber.$i); 
    } 
    return $arrdays; 
} 

Пример - найти данные даты начала и окончания неделю:

$week= (isset($_GET['week']) && $_GET['week'] !=='')? $_GET['week'] : date('W') ; 
$year = (isset($_GET['year']) && $_GET['year'] !=='')? $_GET['year'] : date('Y') ; 

if($week>52) { 
    $week = 1; 
    $year++; 
}else if($week<1) { 
     $week=52; 
     $year--; 
    } 
$week_days = findWeekDates($week, $year); 
$starting_date = date('Y-m-d', $week_days[0]); 
$ending_date = date('Y-m-d', $week_days[6]); 

надеюсь, что это помогает ...

Смежные вопросы