Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сегодня, вчера, ....
 
 автор: TetRiska   (09.07.2013 в 15:24)   письмо автору
 
 

Всем привет. Имею дату обновления товара. Если товар обновлен сегодня, то пишем "обновлен сегодня", если вчера - "обновлен вчера", а если обновлен 2 дня назад, то тут уже просто выводим дату. Я вроде как бы сделал, но начал проверять, неверно. Прошу помощи в реализации. Спасибо.

$math_date = round((time()-strtotime($res2['result']['em_produce_data_upd'][$g]))/86400);
    
if($math_date == 0){
    $vdate = 'сегодня';
}else if($math_date == 1){
    $vdate = 'вчера';
}else{
    $vdate = date('d.m.y',strtotime($res2['result']['em_produce_data_upd'][$g]));
}

  Ответить  
 
 автор: DangerBay   (09.07.2013 в 16:52)   письмо автору
 
   для: TetRiska   (09.07.2013 в 15:24)
 

Можно так например
<?php
function relative_date($t) {
    
$t       strtotime($t);
    
$reldays round(($t time()) / 86400);
    
    switch (
$reldays) {
        case 
1:
            return 
'Завтра';
        case 
0:
            return 
'Сегодня';
        case -
1:
            return 
'Вчера';
        default:
            return 
date('m.d.Y'$t);
    }
}

// использование
echo relative_date("2013-07-08 11:22:47");

  Ответить  
 
 автор: TetRiska   (09.07.2013 в 17:18)   письмо автору
 
   для: DangerBay   (09.07.2013 в 16:52)
 

опробую отпишу, но с "Завтра" вы погорячились :) товар не может быть обновлен на день вперед

П.С. работает не верно, я поставил 2013-07-09 00:00:00 написало "вчера", а это уже "сегодня"

  Ответить  
 
 автор: DangerBay   (09.07.2013 в 17:38)   письмо автору
 
   для: TetRiska   (09.07.2013 в 17:18)
 

Ага, округление неверно. Так вроде правильней будет.
<?php
function relative_date($t) {
    
$t       strtotime($t);
    
$reldays ceil(($t time()) / 86400);
    
    switch (
$reldays) {
        case 
0:
            return 
'Сегодня';
        case -
1:
            return 
'Вчера';
        case -
2:
            return 
'2 дня назад';
        default:
            return 
date('m.d.Y'$t);
    }
}

echo 
relative_date("2013-07-09 00:00:00");

  Ответить  
 
 автор: TetRiska   (09.07.2013 в 17:50)   письмо автору
 
   для: DangerBay   (09.07.2013 в 17:38)
 

2013-07-08 23:59:59 - пишет сегодня (( а это "вчера"

  Ответить  
 
 автор: DangerBay   (09.07.2013 в 19:33)   письмо автору
 
   для: TetRiska   (09.07.2013 в 17:50)
 

Должно так работать, если ещё нужно
<?php
function relative_date($t) {
$t strtotime($t);
$reldays = ($t strtotime(date('D'))) / 86400;
    
if (
$reldays >= && $reldays 1)
return 
'Сегодня';
else if (
$reldays >= -&& $reldays 0)
return 
'Вчера';
else 
return 
date('m.d.Y'$t); 
}

echo 
relative_date("2013-07-09 00:00:00"); 

  Ответить  
 
 автор: TetRiska   (09.07.2013 в 21:30)   письмо автору
 
   для: DangerBay   (09.07.2013 в 19:33)
 

работает, спасибо

  Ответить  
 
 автор: confirm   (09.07.2013 в 17:55)   письмо автору
 
   для: TetRiska   (09.07.2013 в 15:24)
 

>round((time()-strtotime($res2['result']['em_produce_data_upd'][$g]))/86400)

DateTime::diff, date_diff

  Ответить  
 
 автор: TetRiska   (09.07.2013 в 18:13)   письмо автору
 
   для: confirm   (09.07.2013 в 17:55)
 

можно пример, начал пробовать, фигню мне выдает

  Ответить  
 
 автор: confirm   (09.07.2013 в 18:19)   письмо автору
 
   для: TetRiska   (09.07.2013 в 18:13)
 

http://www.php.net/manual/ru/book.datetime.php

  Ответить  
 
 автор: Rolex   (09.07.2013 в 17:59)   письмо автору
 
   для: TetRiska   (09.07.2013 в 15:24)
 

Если данные берутся из БД, то в запросе добавляем к столбцам
TO_DAYS( NOW( ) ) - TO_DAYS( date_update ) AS interval_days
где date_update - название столбца, содержащего даты обновления записи. Элемент ассоциативного результирующего массива interval_days будет содержать количество дней, прошедшее с момента обновления. А далее Ваша проверка:

if($arr[interval_days] == 0){ 
    $vdate = 'сегодня'; 
}else if($arr[interval_days] == 1){ 
    $vdate = 'вчера'; 
}else{ 
    $vdate = date('d.m.y',strtotime($res2['result']['em_produce_data_upd'][$g])); 
}

  Ответить  
 
 автор: TetRiska   (09.07.2013 в 18:12)   письмо автору
 
   для: Rolex   (09.07.2013 в 17:59)
 

дата обновления из бд берется

куда в запрос вставить?

$sql2 = " 
        SELECT a.`em_produce_id`,
               a.`em_produce_name`,
               a.`em_produce_data_upd`
        FROM `em_produce`
        ";
    
$res2 = select_query($sql2);

  Ответить  
 
 автор: confirm   (09.07.2013 в 18:22)   письмо автору
 
   для: TetRiska   (09.07.2013 в 18:12)
 

В любом месте после SELECT
DATEDIFF(NOW(), date_field)
или IF(DATEDIFF(NOW(), date_field), express, express)
и т.п.

  Ответить  
 
 автор: TetRiska   (09.07.2013 в 21:31)   письмо автору
 
   для: confirm   (09.07.2013 в 18:22)
 

спасибо, как вариант попробую

  Ответить  
 
 автор: TetRiska   (09.07.2013 в 21:32)   письмо автору
 
   для: Rolex   (09.07.2013 в 17:59)
 

спасибо

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования