Jak bym zabrał się do uzyskania sygnatury czasowej w php na dziś o północy. Powiedzmy, że jest poniedziałek, 17:00 i chcę mieć znacznik czasu z poniedziałku (dzisiaj) o północy (12:00), co już się wydarzyło.
Dziękuję Ci
Jak bym zabrał się do uzyskania sygnatury czasowej w php na dziś o północy. Powiedzmy, że jest poniedziałek, 17:00 i chcę mieć znacznik czasu z poniedziałku (dzisiaj) o północy (12:00), co już się wydarzyło.
Dziękuję Ci
Odpowiedzi:
$timestamp = strtotime('today midnight');
Możesz rzucić okiem na to, co ma do zaoferowania PHP: http://php.net/datetime
$timestamp = strtotime('today');
jest północ. Ale pssst ten powyżej wygląda fajniej jako odpowiedź na pytanie;)
strtotime('today+00:00')
.
Myślę, że powinieneś użyć nowego obiektu PHP DateTime, ponieważ nie ma problemów z robieniem dat poza 32-bitowymi ograniczeniami, które ma strtotime (). Oto przykład, jak uzyskać dzisiejszą datę o północy.
$today = new DateTime();
$today->setTime(0,0);
Lub jeśli używasz PHP 5.4 lub nowszego, możesz to zrobić w ten sposób:
$today = (new DateTime())->setTime(0,0);
Następnie możesz użyć, echo $today->format('Y-m-d');
aby uzyskać format, w jakim chcesz uzyskać obiekt wyjściowy.
new DateTime('today midnight')
co sprawia, że intencja jest bardziej jasna (ale to oczywiście kwestia gustu).
$today = new DateTime('today')
new Carbon('today midnight')
a następnie możesz użyć wszystkich rzeczy z węgla, takich jak ->subDays(6)
. Zobacz carbon.nesbot.com
Chcesz obliczyć czas ostatniego zdarzenia niebieskiego, w którym słońce przeszło bezpośrednio pod twoimi stopami, dostosowany do lokalnych konwencji oznaczania południa, a także potencjalnie dostosowany tak, aby ludzie mieli wystarczającą ilość światła dziennego po powrocie do domu z pracy i na inne względy polityczne.
Zniechęcające, prawda? W rzeczywistości jest to częsty problem, ale pełna odpowiedź zależy od lokalizacji:
$zone = new \DateTimeZone('America/New_York'); // Or your own definition of “here”
$todayStart = new \DateTime('today midnight', $zone);
$timestamp = $todayStart->getTimestamp();
Potencjalne definicje „tutaj” są wymienione na https://secure.php.net/manual/en/timezones.php
strtotime('America/New_York today midnight');
? - 3v4l.org/I85qD
$today_at_midnight = strtotime(date("Ymd"));
powinien dać ci to, czego szukasz.
wyjaśnienie
To, co zrobiłem, to użycie funkcji daty PHP, aby uzyskać dzisiejszą datę bez żadnych odniesień do czasu, a następnie przekazałem ją do funkcji „string to time”, która konwertuje datę i godzinę na znacznik czasu epoki. Jeśli nie ma czasu, przyjmuje pierwszą sekundę tego dnia.
Źródła: Funkcja daty: http://php.net/manual/en/function.date.php
Ciąg do czasu: http://us2.php.net/manual/en/function.strtotime.php
strtotime()
, umysł był tak skupiony na funkcji daty. Przeprosiny.
W bardziej obiektywny sposób:
$today = new \DateTimeImmutable('today');
przykład:
echo (new \DateTimeImmutable('today'))->format('Y-m-d H:i:s');
// will output: 2019-05-16 00:00:00
i:
echo (new \DateTimeImmutable())->format('Y-m-d H:i:s');
echo (new \DateTimeImmutable('now'))->format('Y-m-d H:i:s');
// will output: 2019-05-16 14:00:35
$midnight = strtotime('midnight');
jest ważny
Możesz także wypróbować
strtotime('12am')
lub strtotime('[input any time you wish to here. e.g noon, 6pm, 3pm, 8pm, etc]')
. Pominąłem dodawanie dzisiaj przed północą, ponieważ domyślnie jest to dzisiaj.
function getTodaysTimeStamp() {
const currentTimeStamp = Math.round(Date.now() / 1000);
const startOfDay = currentTimeStamp - (currentTimeStamp % 86400);
return { startOfDay, endOfDay: startOfDay + 86400 - 1 };
}
// starts from sunday
function getThisWeeksTimeStamp() {
const currentTimeStamp = Math.round(Date.now() / 1000);
const currentDay = new Date(currentTimeStamp * 1000);
const startOfWeek = currentTimeStamp - (currentDay.getDay() * 86400) - (currentTimeStamp % 86400);
return { startOfWeek, endOfWeek: startOfWeek + 7 * 86400 - 1 };
}
function getThisMonthsTimeStamp() {
const currentTimeStamp = Math.round(Date.now() / 1000);
const currentDay = new Date(currentTimeStamp * 1000);
const startOfMonth = currentTimeStamp - ((currentDay.getDate() - 1) * 86400) - (currentTimeStamp % 86400);
const currentMonth = currentDay.getMonth() + 1;
let daysInMonth = 0;
if (currentMonth === 2) daysInMonth = 28;
else if ([1, 3, 5, 7, 8, 10, 12].includes(currentMonth)) daysInMonth = 31;
else daysInMonth = 30;
return { startOfMonth, endOfMonth: startOfMonth + daysInMonth * 86400 - 1 };
}
console.log(getTodaysTimeStamp());
console.log(getThisWeeksTimeStamp());
console.log(getThisMonthsTimeStamp());