Как я могу получить время, оставшееся до полуночи, а также начало следующей недели?

0

У меня есть приложение, в котором пользователи могут публиковать сообщения. В зависимости от состояния своей учетной записи они могут отправлять сообщения один раз в день (тип учетной записи A) или один раз в неделю (тип учетной записи B).

Для типа учетной записи A я хотел бы знать, как получить оставшееся время до полуночи (желательно в секундах). Например, если текущее время равно 11PM, оно вернет 3600 (60 минут) до полуночи. Таким образом, я могу сказать пользователю, что они не могут сделать еще одну запись в течение 60 минут.

Для типа учетной записи B я хотел бы знать, как получить оставшееся время до начала новой недели. Предположим, что новая неделя начнется в воскресенье.

  • 0
    зачем вам это решение в SQL? Предполагается, что пользователь играет в вашем приложении, где нет необходимости взаимодействовать с БД, но вы все равно делаете вызов БД, чтобы получить оставшееся время.
  • 0
    Я думал, что проверка в SQL была бы лучшей, так как я уже проверяю базу данных, чтобы увидеть, сделали ли они уже сообщение сегодня (или на неделе для типа счета B). Чтобы вы посоветовали?
Показать ещё 2 комментария
Теги:

4 ответа

1
Лучший ответ

Тип учетной записи A:

SELECT TIMESTAMPDIFF(SECOND,NOW(),DATE(NOW()) + INTERVAL 1 DAY);

Тип учетной записи B:

SELECT TIMESTAMPDIFF(SECOND,NOW(),DATE(NOW() + INTERVAL (6 - WEEKDAY(NOW())) DAY)); 
  • 0
    Просто интересно, что делает "- ИНТЕРВАЛ 1 ВТОРАЯ"? Это необходимо?
  • 0
    @ user3614030 Снова глядя, я не уверен, почему я подумал, что это необходимо
0

Тест дает полночь сегодняшнего дня и вычитает дату отправки учетной записи типа A. Test2 дает полночь конца недели и вычитает из Post Post учетной записи типа B.

select
datediff(ss, PostDateA, convert(datetime,dateadd(dd,1,convert(int,getdate())),109)) as test,
datediff(ss, PostDateB, convert(datetime,dateadd(dd,1,convert(int,dateadd(dd,7-(datepart(dw,getdate())),getdate()))),109)) test2
from
table
0

Вы можете использовать функцию UNIX_TIMESTAMP()

Тип A (Время в секундах до полуночи):

 SELECT UNIX_TIMESTAMP(CURRENT_DATE() + INTERVAL 1 DAY)  -
 UNIX_TIMESTAMP(NOW())

Тип B (Время в секундах до следующей недели: неделя начинается в понедельник):

SELECT UNIX_TIMESTAMP((CURDATE()+7 - INTERVAL WEEKDAY(CURDATE()+7) Day)) - UNIX_TIMESTAMP((CURDATE()))
0

Тип учетной записи A:

SELECT 
TIMESTAMPDIFF(SECOND, your_time_field, DATE_FORMAT(DATE_ADD(your_time_field, INTERVAL 1 DAY), "%Y-%m-%d 00:00:00"))
FROM your_table;

Тип учетной записи B:

SELECT 
TIMESTAMPDIFF(SECOND, your_time_field, ((CURDATE() + INTERVAL 1 WEEK) - INTERVAL WEEK(CURDATE()) DAY));
FROM your_table;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню