Проверка корректности даты в PHP
При работе с датами, особенно при формировании даты предложенной выше функцией mktime() необходимо учитывать корректность вводимой даты. Для этого в PHP используется функция:
bool checkdate(int month, int day, int year)
Возвращает true если дата, заданная аргументами, является правильной; иначе возвращает false. Дата считается правильной, если:
— год в диапазоне от 1 до 32767;
— месяц в диапазоне от 1 до 12;
— день для заданного месяца с учетом високосного года указаны правильно.
Пример проверки даты:
$my_day = 32; $my_month = 12; $my_year = 2014; if (!checkdate($my_month, $my_day, $my_year)) echo 'Ошибка: дата указана некорректно';
Перевод строки в Date
- 4 цифры для года (yyyy);
- 2 цифры для месяца (ММ);
- 2 цифры для дня (dd);
- 2 цифры для часов в 24-часовом формате (HH);
- 2 цифры для минут (mm);
- 2 цифры для секунд (ss).
SimpleDateFormat
Символ | Описание | Пример |
---|---|---|
G | эра (в английской локализации — AD и BC) | н.э. |
y | год (4-х значное число) | 2020 |
yy | год (последние 2 цифры) | 20 |
yyyy | год (4-х значное число) | 2020 |
M | номер месяца (без лидирующих нулей) | 8 |
MM | номер месяца (с лидирующими нулями, если порядковый номер месяца < 10) | 04 |
MMM | трехбуквенное сокращение месяца (в соответствии с локализацией) | янв |
MMMM | полное название месяца | Июнь |
w | неделя в году (без лидирующих нулей) | 4 |
ww | неделя в году (с лидирующими нулями) | 04 |
W | неделя в месяце (без лидирующих нулей) | 3 |
WW | неделя в месяце (с лидирующим нулем) | 03 |
D | день в году | 67 |
d | день месяца (без лидирующих нулей) | 9 |
dd | день месяца (с лидирующими нулями) | 09 |
F | день недели в месяце (без лидирующих нулей) | 9 |
FF | день недели в месяце (с лидирующими нулями) | 09 |
E | день недели (сокращение) | Вт |
EEEE | день недели (полностью) | пятница |
u | номер дня недели (без лидирующих нулей) | 5 |
uu | номер дня недели (с лидирующими нулями) | 05 |
a | маркер AM/PM | AM |
H | часы в 24-часовом формате без лидирующих нулей | 6 |
HH | часы в 24-часовом формате с лидирующим нулем | 06 |
k | количество часов в 24-часовом формате | 18 |
K | количество часов в 12-часовом формате | 6 |
h | время в 12-часовом формате без лидирующих нулей | 6 |
hh | время в 12-часовом формате с лидирующим нулем | 06 |
m | минуты без лидирующих нулей | 32 |
mm | минуты с лидирующим нулем | 32 |
s | секунды без лидирующих нулей | 11 |
ss | секунды с лидирующим нулем | 11 |
S | миллисекунды | 297 |
z | часовой пояс | EET |
Z | часовой пояс в формате RFC 822 | 300 |
Шаблон | Пример |
---|---|
dd-MM-yyyy | 01-11-2020 |
yyyy-MM-dd | 2019-10-01 |
HH:mm:ss.SSS | 23:59.59.999 |
yyyy-MM-dd HH:mm:ss | 2018-11-30 03:09:02 |
yyyy-MM-dd HH:mm:ss.SSS | 2016-03-01 01:20:47.999 |
yyyy-MM-dd HH:mm:ss.SSS Z | 2013-13-13 23:59:59.999 +0100 |
SimpleDateFormatjava string to dateSimpleDateFormat
-
Создаем строку, с которой нужно задать дату:
-
Создаем новый объект SimpleDateFormat с шаблоном, который совпадает с тем, что у нас в строке (иначе распарсить не получится):
Как вы видите, у нас тут появился аргумент Locale. Если же мы его опустим, он будет использовать значение Locale по умолчанию, которое не всегда является английским.
Если языковой стандарт не совпадает с входной строкой, то строковые данные, привязанные к языку, как у нас Mon или April, не будут распознаны и вызовут падение — java.text.ParseException, даже в том случае когда шаблон подходит.
Тем не менее, можно не указывать формат, если у нас используется шаблон, который не привязан к языку. Как пример — yyyy-MM-dd HH:mm:ss
-
Создаём дату с помощью форматтера, который в свою очередь парсит её из входной строки:
Вывод в консоль:
Хммм….Но формат-то уже не тот!
Чтобы сделать тот же формат, вновь используем форматтер:
Вывод в консоль:
Преобразование даты и времени в формат timestamp
Для обратного преобразования даты из стандартного формата в числовое значение timestamp применяется функция:
int mktime(]]]]]])
Функция mktime() возвращает значение времени Unix, соответствующую дате и времени, заданным аргументами. Например:
$my_date = mktime (10, 30, 0, 12, 12, 2014);
Следует внимательно относится к порядку аргументов функции: часы, минуты, секунды, месяц, день, год.
Кроме простого формирования значения даты в timestamp, функцию mktime() можно использовать для арифметически вычисления с датами. Для этого просто можно ввести необходимые аргументы. Например, если указать 14 месяц, то в итоговом значении, месяц будет 2-й, а значение года увеличится на единицу:
$my_day = 12; $my_month = 12; $my_year = 2014; $new_date = mktime(0, 0, 0, $my_month + 5, $my_day, $my_year); echo date('d.m.Y', $new_date); // 12.05.2015 (дата)
Аналогично можно поступать и с другими параметрами.
Функции даты и времени в SQLite
Для работы с датой и временем SQLite предлагает 5 встроенных функций:
- date(timestring, modifier, modifier, …)
- time(timestring, modifier, modifier, …)
- datetime(timestring, modifier, modifier, …)
- julianday(timestring, modifier, modifier, …)
- strftime(format, timestring, modifier, modifier, …)
Все пять функций даты и времени принимают в качестве аргумента строку времени. За строкой времени могут следовать один или несколько модификаторов. Функция strftime() function также принимает строку формата в качестве первого аргумента.
Функции даты и времени используют стандарт ISO-8601 для строк формата. Функция date() возвращает дату в формате: YYYY-MM-DD. Функция time() возвращает время в формате HH:MM:SS. Функция datetime() возвращает «YYYY-MM-DD HH:MM:SS». Функция julianday() возвращает Юлианский день — число дней, прошедших начиная с полудня понедельника, 1 января 4713 до н. э. юлианского календаря.
Функция strftime() возвращает дату, отформатированную в соответствии со строкой формата, указанной в качестве первого аргумента. Строка формата поддерживает основные замены, которые есть в функции strftime() из стандартной библиотеки C плюс еще 2 замены: %f и %J. Ниже список всех корректных замен функции strftime() в SQLite:
%d | День месяца: 00 | |
%f | Доли секунды: SS.SSS | |
%H | час: 00-24 | |
%j | день года: 001-366 | |
%J | Юлианский день | |
%m | месяц: 01-12 | |
%M | минуты: 00-59 | |
%s | количество секунд с 1970-01-01 (unix timestamp) | |
%S | секунды: 00-59 | |
%w | день недели 0-6 где Воскресенье==0 | |
%W | неделя года: 00-53 | |
%Y | год: 0000-9999 | |
%% | % |
Обратите внимание, что все другие функции даты и времени могут быть выражены через strftime():
Функция | Эквивалент strftime() | |
date(…) | strftime(‘%Y-%m-%d’, …) | |
time(…) | strftime(‘%H:%M:%S’, …) | |
datetime(…) | strftime(‘%Y-%m-%d %H:%M:%S’, …) | |
julianday(…) | strftime(‘%J’, …) |
Основная причина использования других функций вместо strftime() — это удобство и эффективность.
Как конвертировать строки в datetime
в Python — это метод из модуля datetime. Вот его синтаксис:
Аргументы формата необязательные и являются строками. Предположим, нужно извлечь текущие дату и время:
Копировать
Результат:
Результат будет в формате ISO 8601, то есть YYYY-MM-DDTHH:MM:SS.mmmmmm — формат по умолчанию, что позволяет получать строки в едином формате.
Таблица форматов:
Символ | Описание | Пример |
---|---|---|
%a | День недели, короткий вариант | Wed |
%A | Будний день, полный вариант | Wednesday |
%w | День недели числом 0-6, 0 — воскресенье | 3 |
%d | День месяца 01-31 | 31 |
%b | Название месяца, короткий вариант | Dec |
%B | Название месяца, полное название | December |
%m | Месяц числом 01-12 | 12 |
%y | Год, короткий вариант, без века | 18 |
%Y | Год, полный вариант | 2018 |
%H | Час 00-23 | 17 |
%I | Час 00-12 | 05 |
%p | AM/PM | PM |
%M | Минута 00-59 | 41 |
%S | Секунда 00-59 | 08 |
%f | Микросекунда 000000-999999 | 548513 |
%z | Разница UTC | +0100 |
%Z | Часовой пояс | CST |
%j | День в году 001-366 | 365 |
%U | Неделя числом в году, Воскресенье первый день недели, 00-53 | 52 |
%W | Неделя числом в году, Понедельник первый день недели, 00-53 | 52 |
%c | Локальная версия даты и времени | Mon Dec 31 17:41:00 2018 |
%x | Локальная версия даты | 12/31/18 |
%X | Локальная версия времени | 17:41:00 |
%% | Символ “%” | % |
Копировать
Результат:
Примеры конвертации строки в объект datetime с помощью strptime
Предположим, что есть следующая строка с датой: «11/17/20 15:02:34», и ее нужно конвертировать в объект .
Копировать
Результат:
Даты могут быть записаны в разных форматах. Например, следующие даты отличаются лишь представлением:
- Friday, November 17, 2020;
- 11/17/20;
- 11–17–2020.
Вот как это работает:
Копировать
Результат будет одинаковым для всех форматов:
Практические примеры
Если строка представлена в формате «Oct 17 2020 9:00PM», то ее можно конвертировать следующим образом:
Копировать
Результат — .
Функцию можно использовать для конвертации строки в объект даты:
Копировать
Результат:
Получение отдельных компонентов даты и времени
В JavaScript для получения отдельных компонентов даты и времени предназначены следующие методы:
- – возвращает год, состоящий из 4 чисел;
- – возвращает месяц в формате числа от 0 до 11 (0 – январь, 1 – февраль, 2 – март, …, 11 – декабрь);
- – возвращает число месяца от 1 до 31;
- – возвращает количество часов от 0 до 23;
- – возвращает количество минут от 0 до 59;
- – возвращает количество секунд от 0 до 59;
- – возвращает количество миллисекунд от 0 до 999.
Все эти методы возвращают отдельные компоненты даты и времени в соответствии с часовым поясом установленном на локальном устройстве пользователя.
Пример:
// создадим дату 11.11.2019 00:00 по UTC var newDate = new Date(Date.UTC(2019,11,11)); // получим компоненты даты, если на устройстве пользователя местное время равно UTC+10:00 newDate.getFullYear(); //2019 newDate.getMonth(); // 10 newDate.getDate(); // 11 newDate.getHours(); // 10 newDate.getMinutes(); // 0 newDate.getSeconds(); // 0 newDate.getMilliseconds(); // 0
Пример, в котором поприветствуем пользователя в зависимости от того какой сейчас у него интервал времени:
// получим текущее время пользователя и компоненты этого времени var now = new Date(), hour = now.getHours(), minute = now.getMinutes(), second = now.getSeconds(), message = ''; // определим фразу приветствия в зависимости от местного времени пользователя if (hour <= 6) { message = 'Доброе время суток'; } else if (hour <= 12) { message = 'Доброе утро'; } else if (hour <= 18) { message = 'Добрый день'; } else { message = 'Добрый вечер'; } // выполним форматирование времени с использованием тернарного оператора minute = (minute < 10) ? '0' + minute : minute; second = (second < 10) ? '0' + second : second; hour = (hour < 10) ? '0' + hour : hour; message += ', сейчас ' + hour + ':' + minute + ':' + second; // выведем приветствие и время в консоль console.log(message); // Добрый вечер, сейчас 22:50:39
В этом примере вывод времени в нужном формате осуществлён с использованием тернарного оператора.
В JavaScript имеются аналоги этих методов для получения отдельных компонентов даты и времени для часового пояса UTC+0. Эти методы называются аналогично, но с добавленным «UTC» после «get»: , , , , , , .
Получить номер дня недели в JavaScript можно с помощью метода .
Данный метод возвращает число от 0 до 6 (0 – воскресенье, 1 – понедельник, …, 6 – суббота).
Пример, в котором переведём день недели из числового в строковое представление:
var days =; // получим текущую дату var now = new Date(); // выведем в консоль день недели console.log('Сегодня ' + days);
Получить количество миллисекунд прошедших с 01.01.1970 00:00:00 UTC в JavaScript можно с помощью метода .
Узнать разницу (в минутах) между часовым поясом локального устройства и UTC в JavaScript можно с помощью метода .
Convenience Extraction Functions
- (x) → bigint
-
Returns the day of the month from .
- (x) → bigint
-
This is an alias for .
- (x) → bigint
-
Returns the ISO day of the week from .
The value ranges from (Monday) to (Sunday).
- (x) → bigint
-
Returns the day of the year from .
The value ranges from to .
- (x) → bigint
-
This is an alias for .
- (x) → bigint
-
This is an alias for .
- (x) → bigint
-
Returns the hour of the day from .
The value ranges from to .
- (x) → bigint
-
Returns the minute of the hour from .
- (x) → bigint
-
Returns the month of the year from .
- (x) → bigint
-
Returns the quarter of the year from .
The value ranges from to .
- (x) → bigint
-
Returns the second of the hour from .
- (timestamp) → bigint
-
Returns the hour of the time zone offset from .
- (timestamp) → bigint
-
Returns the minute of the time zone offset from .
- (x) → bigint
-
Returns the ISO week of the year from .
The value ranges from to .
- (x) → bigint
-
This is an alias for .
- (x) → bigint
-
Returns the year from .
- (x) → bigint
-
Returns the year of the ISO week from .
- (x) → bigint
-
This is an alias for .
Часовые пояса
Пока что мы работали с без учета часовых поясов и летнего времени. Но прежде чем переходить к следующим пунктам, нужно разобраться с разницей в абсолютных (naive) и относительных (aware) датах.
Абсолютные даты не содержат информацию, которая бы могла определить часовой пояс или летнее время. Однако с такими намного проще работать.
Относительные же содержат достаточно информации для определения часового пояса или отслеживания изменений из-за летнего времени.
Разница между DST, GMT и UTC
- GMTОфициальный часовой пояс, используемый в некоторых странах Европы и Африки. Он может быть представлен как в 24, так и в 12-часовом форматах. GMT используется для того, чтобы задавать местное время. Например, местное время для Берлина 2020–10–17 09:40:33.614581+02:00 GMT. Для Найроби же это — 2020–10–17 10:40:33.592608+03:00 GMT.
- DST (летнее время)Страны, которые переходят на летнее время, делают это для того, чтобы дневное время длилось как можно дольше. Во время летнего времени они переводят стрелки своих часов на час вперед и возвращаются обратно осенью.
- UTC (всемирное координированное время)Временной стандарт для часовых поясов во всем мире. Он позволяет синхронизировать время во всем мире и служит отправной точкой для остальных.
Как работать с часовыми поясами
Рассмотрим, как создать простой относительный объект :
Копировать
Эта программа возвращает объект с абсолютным значением . Если же нужно сделать его абсолютным, то нужно явно указать часовой пояс. Как это сделать? В библиотеке в Python нет модуля для работы с часовыми поясами. Для этого нужно использовать другие библиотеки. Одна из таких — pytz.
Предположим, нужно получить текущее время для Найроби. Для этого нужно использовать конкретный часовой пояс. Для начала можно с помощью pytz получить все существующие часовые пояса.
Копировать
Вот некоторые из них:
Для получения времени в Найроби:
Копировать
Результат:
А вот так можно получить время Берлина:
Копировать
Результат:
Здесь можно увидеть разницу в часовых поясах разных городов, хотя сама дата одна и та же.
Конвертация часовых поясов
При конвертации часовых поясов в первую очередь нужно помнить о том, что все атрибуты представлены в UTC. Допустим, нужно конвертировать это значение в :
Копировать
Результат:
Другие практические примеры
Всегда храните даты в UTC. Вот примеры:
Копировать
Результат для этого кода — , хотя локальное время может быть, например, таким . А уже при демонстрации даты пользователю стоит использовать метод с местными настройками:
Копировать
Вернет текущее локальное время — .
Функция DateSerial
DateSerial – это функция, которая возвращает значение даты для указанного года, месяца и дня. Тип возвращаемого значения – Variant/Date.
Синтаксис
1 | DateSerial(year,month,day) |
Параметры
Параметр | Описание |
---|---|
year | Обязательный параметр типа Integer. Числовое выражение, возвращающее значение от 100 до 9999 включительно. |
month | Обязательный параметр типа Integer. Числовое выражение, возвращающее любое значение (в пределах Integer), а не только от 1 до 12.* |
day | Обязательный параметр типа Integer. Числовое выражение, возвращающее любое значение (в пределах Integer), а не только от 1 до 31.* |
* Функция DateSerial автоматически пересчитывает общее количество дней в полные месяцы и остаток, общее количество месяцев в полные годы и остаток (подробнее в примере).
Пример
1 |
SubPrimerDateSerial() MsgBox DateSerial(2021,2,10)’Результат: 10.02.2020 MsgBox DateSerial(2020,1,400)’Результат: 03.02.2021 EndSub |
Разберем подробнее строку :
- 400 дней = 366 дней + 31 день + 3 дня;
- 366 дней = 1 год, так как по условию month:=1, значит февраль 2020 входит в расчет, а в нем – 29 дней;
- 31 день = 1 месяц, так как сначала заполняется январь (по условию month:=1);
- 3 дня – остаток.
В итоге получается:
Как конвертировать объект datetime в строку
Модуль datetime в Python содержит метод , который делает обратное (то есть, конвертирует объект и в строки). Вот его синтаксис:
Примеры конвертации datetime в строку с помощью strftime()
Предположим, нужно конвертировать текущий объект в строку. Сначала нужно получить представление объекта и вызвать на нем метод .
Копировать
Результат — .
Как получить строковое представление даты и времени с помощью функции format()
Пример №1. Конвертация текущей временной метки в объекте в строку в формате «DD-MMM-YYYY (HH:MM:SS:MICROS)»:
Копировать
Результат:
Пример №2. Конвертация текущей временной метки объекта в строку в формате «HH:MM:SS.MICROS – MMM DD YYYY».
Копировать
Результат:
Строковое представление даты и времени в SQLite
Для того, чтобы SQlite правильно понимал и работал с датой (сортировал, сравнивал и т.д.), строка содержащая дату и время должна быть в одном из следующих форматов:
- YYYY-MM-DD
- YYYY-MM-DD HH:MM
- YYYY-MM-DD HH:MM:SS
- YYYY-MM-DD HH:MM:SS.SSS
- YYYY-MM-DDTHH:MM
- YYYY-MM-DDTHH:MM:SS
- YYYY-MM-DDTHH:MM:SS.SSS
- HH:MM
- HH:MM:SS
- HH:MM:SS.SSS
- now
- DDDDDDDDDD
В форматах с 5 по 7 символ «T» означает разделитель даты и времени, как это требуется стандартом ISO-8601. В форматах с 8 по 10 указано только время, при этом считается, что дата равна 2000-01-01. Формат 11 — строка ‘now’ преобразуется в текущую дату и время как полученные методом xCurrentTime объекта sqlite3_vfs. Значение ‘now’ функций даты и времени всегда возвращают одно и то же значение для нескольких вызовов в пределах одного и того же sqlite3_step(). Формат 12 — это Юлианский день выраженный в виде дробного числа.
Обратите внимание: Функции даты и времени в SQLite используют Всемирное координированное время (UTC). Чтобы получить локальные дату и время, следует использовать модификатор localtime, например, чтобы получить текущую локальную дату и время, можно воспользоваться таким запросом:. Форматы со 2 по 10 могут дополнительно сопровождаться индикатором часового пояса в формате «HH:MM» или просто указанием часовой зоны «Z»
Функции даты и времени используют UTC или «zulu» время (время по Гринвичу), таким образом суффикс «Z» не обязателен, если вы используете такое время. Любой не пустой суффикс «HH:MM» вычитается из указанной даты и времени для вычисления времени zulu. Например, все следующие строки эквивалентны:
Форматы со 2 по 10 могут дополнительно сопровождаться индикатором часового пояса в формате «HH:MM» или просто указанием часовой зоны «Z«. Функции даты и времени используют UTC или «zulu» время (время по Гринвичу), таким образом суффикс «Z» не обязателен, если вы используете такое время. Любой не пустой суффикс «HH:MM» вычитается из указанной даты и времени для вычисления времени zulu. Например, все следующие строки эквивалентны:
В форматах 4, 7 и 10 значение доли секунды SS.SSS может содержать одну или несколько цифр после запятой. В примерах показаны ровно три цифры, поскольку только первые три цифры значимы для результата, но входная строка может иметь меньше или больше трех цифр, при этом функции даты и времени будут работать правильно. Аналогично, формат 12 отображается с 10 значащими цифрами, но функции даты/времени действительно принимают столько цифр, сколько необходимо для представления числа в юлианский день.
Функция DateAdd
DateAdd – это функция, которая возвращает результат прибавления к дате указанного интервала времени. Тип возвращаемого значения – Variant/Date.
Синтаксис
1 | DateAdd(interval,number,date) |
Параметры
Параметр | Описание |
---|---|
interval | Обязательный параметр. Строковое выражение из спецсимволов, представляющее интервал времени, который требуется добавить. |
number | Обязательный параметр. Числовое выражение, задающее количество интервалов, которые необходимо добавить. Может быть как положительным (возвращается будущая дата), так и отрицательным (возвращается предыдущая дата). |
date | Обязательный параметр. Значение типа или литерал, представляющий дату, к которой должен быть добавлен интервал. |
Таблицу аргументов (значений) параметра смотрите в параграфе «Приложение 1».
Примечание к таблице аргументов: три символа – y, d, w – указывают функции на один день, который необходимо прибавить к исходной дате раз.
Пример
1 |
SubPrimerDateAdd() MsgBox»31.01.2021 + 1 месяц = «&DateAdd(«m»,1,»31.01.2021″)’Результат: 28.02.2021 MsgBox»Сегодня + 3 года = «&DateAdd(«yyyy»,3,Date) MsgBox»Сегодня — 2 недели = «&DateAdd(«ww»,-2,Date) MsgBox»10:22:14 + 10 минут = «&DateAdd(«n»,10,»10:22:14″)’Результат: 10:32:14 EndSub |
Преобразование даты и времени в строку
Приведенная ниже программа преобразует объект, содержащий текущую дату и время, в различные строковые форматы.
from datetime import datetime now = datetime.now() # current date and time year = now.strftime("%Y") print("year:", year) month = now.strftime("%m") print("month:", month) day = now.strftime("%d") print("day:", day) time = now.strftime("%H:%M:%S") print("time:", time) date_time = now.strftime("%m/%d/%Y, %H:%M:%S") print("date and time:",date_time)
Когда вы запустите программу, результат будет примерно таким:
year: 2018 month: 12 day: 24 time: 04:59:31 date and time: 12/24/2018, 04:59:31
Здесь год, день, время и date_time ‒ это строки, а now ‒ объект datetime.
Функция WeekdayName
WeekdayName – это функция, которая возвращает название дня недели в виде строки.
Синтаксис
1 | WeekdayName(weekday,abbreviate,firstdayofweek) |
Параметры
Параметр | Описание |
---|---|
weekday | Обязательный параметр. Числовое обозначение дня недели от 1 до 7 включительно. |
abbreviate | Необязательный параметр. Логическое значение: True – возвращается сокращенное название дня недели, False (по умолчанию) – название дня недели не сокращается. |
firstdayofweek | Константа, задающая первый день недели. По умолчанию – воскресенье. |
Таблицу констант из коллекции смотрите в параграфе «Приложение 2».
Пример
1 |
SubPrimerWeekdayName() MsgBox WeekdayName(3,True,vbMonday)’Результат: Ср MsgBox WeekdayName(3,,vbMonday)’Результат: среда MsgBox WeekdayName(Weekday(Now,vbMonday),,vbMonday) EndSub |
Создание объекта для хранения даты и времени в C#
Для создания объекта типа мы можем воспользоваться одним из конструкторов структуры:
public DateTime() public DateTime(int year, int month, int day) public DateTime(int year, int month, int day, Calendar calendar) public DateTime(int year, int month, int day, int hour, int minute, int second) public DateTime(int year, int month, int day, int hour, int minute, int second, DateTimeKind kind) public DateTime(int year, int month, int day, int hour, int minute, int second, Calendar calendar) public DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond) public DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, DateTimeKind kind) public DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, Calendar calendar) public DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, Calendar calendar, DateTimeKind kind) public DateTime(long ticks) public DateTime(long ticks, DateTimeKind kind)
Например:
DateTime empty = new DateTime(); DateTime date = new DateTime(2021,09,11); DateTime dateTime = new DateTime(2021, 09, 11, 10, 59, 59); Console.WriteLine(empty); Console.WriteLine(date); Console.WriteLine(dateTime);
В результате получим следующий вывод консоли:
01.01.0001 0:00:00
11.09.2021 0:00:00
11.09.2021 10:59:59
В первом случае мы использовали конструктор по умолчанию и получили минимально возможную дату и время, во втором случае мы задали только дату и в третьем — дату и время.
При этом, если необходимо получить текущие значения даты и времени в C#, то можно воспользоваться следующими свойства :
DateTime now = DateTime.Now;//текущие дата и время DateTime nowUtc = DateTime.UtcNow; //текущие дата и время в UTC DateTime dateUtc = DateTime.Today; //текущая дата Console.WriteLine($"Now: {now}"); Console.WriteLine($"nowUtc: {nowUtc}"); Console.WriteLine($"Today {dateUtc}");
Now: 09.11.2021 19:27:16
nowUtc: 09.11.2021 13:27:16
Today 09.11.2021 0:00:00
Функция DateDiff
DateDiff – это функция, которая возвращает количество указанных интервалов времени между двумя датами. Тип возвращаемого значения – Variant/Long.
Синтаксис
1 | DateDiff(interval,date1,date2,firstdayofweek,firstweekofyear) |
Параметры
Параметр | Описание |
---|---|
interval | Обязательный параметр. Строковое выражение из спецсимволов, представляющее интервал времени, количество которых (интервалов) требуется вычислить между двумя датами. |
date1, date2 | Обязательные параметры. Значения типа , представляющие две даты, между которыми вычисляется количество указанных интервалов. |
firstdayofweek | Необязательный параметр. Константа, задающая первый день недели. По умолчанию – воскресенье. |
firstweekofyear | Необязательный параметр. Константа, задающая первую неделю года. По умолчанию – неделя, в которую входит 1 января. |
Таблицу аргументов (значений) параметра смотрите в параграфе «Приложение 1».
Примечание к таблице аргументов: в отличие от функции , в функции спецсимвол , как и , обозначает неделю. Но расчет осуществляется по разному. Подробнее об этом на сайте разработчиков.
Параметры и определяют правила расчета количества недель между датами.
Таблицы констант из коллекций и смотрите в параграфах «Приложение 2» и «Приложение 3».
Пример
1 |
SubPrimerDateDiff() ‘Даже если между датами соседних лет разница 1 день, MsgBox DateDiff(«y»,»31.12.2020″,»01.01.2021″)’Результат: 1 год MsgBox DateDiff(«d»,»31.12.2020″,»01.01.2021″)’Результат: 1 день MsgBox DateDiff(«n»,»31.12.2020″,»01.01.2021″)’Результат: 1440 минут MsgBox»Полных лет с начала века = «&DateDiff(«y»,»2000″,Year(Now)-1) EndSub |
Создание даты – 4 примера
В JavaScript создание даты осуществляется с помощью объекта . Объект представляет собой точку на оси времени и предназначен для хранения даты и времени с точностью до миллисекунды.
Примеры создания даты в JavaScript.
1. Создание текущей даты и времени.
Получить текущую дату и время в JavaScript осуществляется посредством создания экземпляра объекта Date без указания параметров:
// текущая дата (дата и время, которая была в момент создания экземпляра объекта Date на локальном компьютере пользователя) var now = new Date(); // например, выведем текущую дату в консоль console.log(now);
Если нужно получить только сегодняшнюю дату в формате строки, то можно воспользоваться методом :
var now = new Date().toLocaleDateString(); // 19.12.2019
Текущее время пользователя можно получить так:
var now = new Date().toLocaleTimeString(); // 11:02:48 var now = new Date().toLocaleTimeString().slice(0,-3); // 11:02
Дату и время в формате строки можно получить следующим образом:
var now = new Date().toLocaleString(); // 19.12.2019, 11:02:48
2. Создание даты путём указания объекту количества миллисекунд, прошедших с 1 января 1970 00:00:00 UTC.
// 1 год (не высокосный) = 365*24*60*60*1000 = 31536000000 мс // например, создадим дату 01.01.1971, 00:00:00 по UTC: var date1 = new Date(31536000000);
3. Создание даты посредством указания её объекту Date в виде строки.
При этом варианте создания даты JavaScript попытается понять переданную ей строку и сформировать на основе её дату. Преобразование строки в дату в JavaScript осуществляется с помощью метода .
Например:
// создание даты на основе строки в формате DD.MM.YY var date1 = new Date('05.11.19'); // создадим дату на основе строки в формате YYYY-MM-DDThh:mm:ss.sss (символ T используется для разделения даты и времени) var date2 = new Date('2015-02-24T21:23'); // создадим дату на основе строки с указанием часового пояса (формат YYYY-MM-DDThh:mm:ss.sss±hh:mm): var date3 = new Date('2015-02-24T22:02+03:00');
4. Создание даты посредством указания следующих параметров через запятую: год (4 цифры), месяц (отсчёт ведётся с 0), день (1..31), часы (0..23), минуты (0..59), секунды (0..59), миллисекунды (0..999). Причём обязательными из них являются только первые два параметра.
Пример создания даты с указанием только обязательных параметров:
// создадим дату 01.01.2015 (неуказанные параметры по умолчанию равны: число - 01, часы - 00, минуты - 00, секунды - 00, миллисекунды – 000). var date1 = new Date(2015,01); // создадим дату 24.01.2015, 21:23 var date2 = new Date(2015,01,24,21,23);
Примечание: Если Вам необходимо установить дату и время в UTC, то можно воспользоваться методом .
//1 пример var date1 = Date.UTC(2015,1,1); var date2 = new Date(date1); alert(date2.toUTCString()); //2 пример var newDate = new Date(Date.UTC(2015,1,1)); alert(newDate.toUTCString());
Функция TimeSerial
TimeSerial – это функция, которая возвращает значение времени для указанного часа, минуты и секунды. Тип возвращаемого значения – Variant/Date.
Синтаксис
1 | TimeSerial(hour,minute,second) |
Параметры
Параметр | Описание |
---|---|
hour | Обязательный параметр типа Integer. Числовое выражение, возвращающее значение от 0 до 23 включительно. |
minute | Обязательный параметр типа Integer. Числовое выражение, возвращающее любое значение (в пределах Integer), а не только от 0 до 59.* |
second | Обязательный параметр типа Integer. Числовое выражение, возвращающее любое значение (в пределах Integer), а не только от 0 до 59.* |
* Функция TimeSerial автоматически пересчитывает общее количество секунд в полные минуты и остаток, общее количество минут в полные часы и остаток (подробнее в примере).
Пример
1 |
SubPrimerTime() MsgBox TimeSerial(5,16,4)’Результат: 5:16:04 MsgBox TimeSerial(5,75,158)’Результат: 6:17:38 EndSub |
Разберем подробнее строку :
- 158 секунд = 120 секунд (2 минуты) + 38 секунд;
- 75 минут = 60 минут (1 час) + 15 минут.
В итоге получается:
Php день недели произвольной даты на русском
Для того, чтобы получить день недели произвольной даты, как вариант, что пришло первое в голову…
Нам нужна временная метка даты, я рассказывал о том, как превращать дату(пусть это будет 2019-02-05 11:38) в метку времени(получили — 1549355880) здесь
Далее нам нужна опять та же функция date, устанавливаем функции аргумент w :
w -> Порядковый номер дня недели -> От 0 (воскресенье) до 6 (суббота) (см. все аргументы)
Далее :
$datetime = 1549355880;
$ITS_NUM = date(«w»,$datetime);
echo $ITS_NUM;
Результат :
2
Опять берем массив :
$days = array( 1 => «Понедельник» , «Вторник» , «Среда» , «Четверг» , «Пятница» , «Суббота» , «Воскресенье» );
Получаем день недели на русском :
$RU_WEEK = $days;
Результат:
Вторник