2011-01-24 6 views
26

Jak mogę uzyskać sygnaturę czasową 12 dnia dzisiejszego, wczoraj i przedwczoraj za pomocą funkcji strtotime() w php?Pobierz sygnaturę czasu dzisiejszego i wczorajszego w php

Godzina 12 jest zmienna i zostałaby zmieniona przez użytkownika.

+0

Zależy od sposobu przechowywania godziny 12 (godziny, minuty, sekundy?). Ogólnie rzecz biorąc, czy spojrzałeś na funkcje wymienione w (http://php.net/manual/en/book.datetime.php)? Czego próbowałeś do tej pory? –

+0

określony duplikat [pobieranie znacznika czasu w php] (http://stackoverflow.com/questions/4772953/getting-timestamp-in-php) - Już zadałeś to wczoraj. Jedyna różnica polega na argumentach przekazywanych do tych funkcji. Możesz znaleźć możliwe formaty względne w [Podręczniku PHP] (http://de2.php.net/manual/en/datetime.formats.relative.php) – Gordon

+0

@Gordon: Przykro mi. Dziś jestem naprawdę głupi. chciałem go usunąć, ale ma teraz odpowiedź i nie mogę go usunąć. –

Odpowiedz

55
$hour = 12; 

$today    = strtotime($hour . ':00:00'); 
$yesterday   = strtotime('-1 day', $today); 
$dayBeforeYesterday = strtotime('-1 day', $yesterday); 
+4

+1 i znam jego dziadkowanie, ale wolałbym '$ today = strtotime ($ hour.": 00: 00 ");' – Hannes

+12

@Hannes Następnie wolałbym $ $. ": 00: 00". Jeśli nie potrzebujesz interpolacji zmiennej, użyj pojedynczych cudzysłowów. : o) – deceze

+0

masz rację oczywiście - copy & paste-litero – Hannes

12

strtotime obsługuje wiele interesting modifiers które można stosować:

$hour = 12; 

$today    = strtotime("today $hour:00"); 
$yesterday   = strtotime("yesterday $hour:00"); 
$dayBeforeYesterday = strtotime("yesterday -1 day $hour:00"); 

echo date("Y-m-d H:i:s\n", $today); 
echo date("Y-m-d H:i:s\n", $yesterday); 
echo date("Y-m-d H:i:s\n", $dayBeforeYesterday); 

To działa zgodnie z przewidywaniami:

2011-01-24 12:00:00 
2011-01-23 12:00:00 
2011-01-22 12:00:00 
13

OO Equivalent

$oToday = new DateTime(); 
$oToday->setTime($iHour, 0); 

$oYesterday = clone $oToday; 
$oYesterday->modify('-1 day'); 

$oDayBefore = clone $oYesterday; 
$oDayBefore->modify('-1 day'); 
4

dostać początek dzień wczoraj

$oDate = new DateTime(); 
$oDate->modify('-1 day'); 
echo $oDate->format('Y-m-d 00:00:00'); 

wynik

2014-11-05 00:00:00 
0

Od PHP 7 można napisać coś this:

$today = new \DateTime(); 
$yesterday = (clone $today)->modify('-1 day'); 
$dayBefore = (clone $yesterday)->modify('-1 day'); 
// Then call ->format('Y-m-d 00:00:00'); on each objects 
2

Można łatwo znaleźć dowolną datę używając DateTime obiekt, to jest tak elastyczny

$yesterday = new DateTime('yesterday'); 
echo $yesterday->format('Y-m-d'); 

$firstModayOfApril = new DateTime('first monday of april'); 
echo $firstModayOfApril->format('Y-m-d'); 

$nextMonday = new DateTime('next monday'); 
echo $nextMonday->format('Y-m-d'); 
0

można również użyć new DateTime("now") na dziś new DateTime("1 day ago") na wczoraj lub wszystkie mogą być przetwarzane przez strtotime funkcji php.

Następnie sformatuj, jak chcesz.