Получение даты и числового дня недели в переполнении стека

Я разрабатываю приложение на PHP, и мне нужно использовать даты и числовое представление дней недели.

Я пробовал следующее:

$today = date("Y-m-d");
$number = date('N', strtotime($today));
echo "Today: " . $today . " weekday: " . $number . "<br>";
$today = strtotime($today);
$tomorrow = strtotime($today);
$tomorrow = strtotime("+1 day", $today);
$number2 = date('N', strtotime($tomorrow));
echo "Tomorrow: " . date('Y-m-d', $tomorrow) . " weekday: " . $number2 . "<br>";

Выход

Today: 2016-11-11 weekday: 5
Tomorrow: 2016-11-12 weekday: 4

Это неправильно, потому что завтрашний день должен быть 6 вместо 4.

Кто-нибудь может мне помочь?

2

Решение

У вас есть небольшая ошибка в коде, вот рабочая:

$today = date("Y-m-d");
$number = date('N', strtotime($today));
echo "Today: " . $today . " weekday: " . $number . "<br>";

$today = strtotime($today);
$tomorrow = strtotime($today);
$tomorrow = strtotime("+1 day", $today);
$number2 = date('N', $tomorrow);
echo "Tomorrow: " . date('Y-m-d', $tomorrow) . " weekday: " . $number2 . "<br>";
2

Другие решения

С помощью DateTime предоставит простое решение

<?php
$date = new DateTime();
echo 'Today: '.$date->format( 'Y-m-d' ) .' weekday '. $date->format( 'N' )."\n";
$date->modify( '+1 days' );
echo 'Tomorrow: '.$date->format( 'Y-m-d' ) .' weekday '. $date->format( 'N' )."\n";

Выход

Today: 2016-11-11 weekday 5
Tomorrow: 2016-11-12 weekday 6

Однако номера дней немного отличаются, N представляет номер дня недели, и, как вы можете видеть, пятница (сегодня) отображается как 5. При этом понедельник будет 1, а воскресенье — 7.

Если вы посмотрите на пример ниже, вы должны получить тот же результат

echo date( 'N' );

Выход

5

Форматирование даты — http://php.net/manual/en/function.date.php

3

DateTime — это объектно-ориентированный метод работы с датами в PHP. Я считаю, что это работает гораздо более свободно. Это в стороне, это выглядит намного лучше.

// Create a new instance
$now = new DateTime();
echo $now->format('N');

// Next day
$now->modify('+1 day');
echo $now->format('N');

Ресурсы

1

Вы почти правильно поняли, но не совсем. Почему вы используете strtotime на $number2? Измените это на $number2 = date('N', $tomorrow); и это будет работать.

-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector