Javascript, время и дата: получение текущей минуты, часа, дня, недели, месяца, года данного миллисекундного времени
Я все еще обнимаю эту библиотеку, но у меня нет времени, поэтому я просто перейду к разделу спойлера и спрошу. При заданном, произвольном значении миллисекундного времени (вроде того, что вы дали от .getTime()
), как мне получить текущую минуту, час, день, неделю месяца, месяца, недели года и года конкретная миллисекунда времени?
Кроме того, как мне получить количество дней в этом месяце? Что-нибудь, что я должен знать о високосных годах и других вещах?
Ответы
Ответ 1
Имена переменных должны быть описательными:
var date = new Date;
date.setTime(result_from_Date_getTime);
var seconds = date.getSeconds();
var minutes = date.getMinutes();
var hour = date.getHours();
var year = date.getFullYear();
var month = date.getMonth(); // beware: January = 0; February = 1, etc.
var day = date.getDate();
var dayOfWeek = date.getDay(); // Sunday = 0, Monday = 1, etc.
var milliSeconds = date.getMilliseconds();
Дни данного месяца не меняются. В високосный год в феврале 29 дней. Вдохновленный http://www.javascriptkata.com/2007/05/24/how-to-know-if-its-a-leap-year/ (спасибо Peter Bailey!)
Продолжение предыдущего кода:
var days_in_months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
// for leap years, February has 29 days. Check whether
// February, the 29th exists for the given year
if( (new Date(year, 1, 29)).getDate() == 29 ) days_in_month[1] = 29;
Существует нет простого способа получить неделю в году. Для ответа на этот вопрос см. Есть ли способ в javascript для создания объекта даты с использованием года и номера недели ISO?
Ответ 2
Относительно количества дней в месяце просто используйте команду статического коммутатора и проверьте if (year % 4 == 0)
, и в этом случае февраль будет иметь 29 дней.
Минута, час, день и т.д.:
var someMillisecondValue = 511111222127;
var date = new Date(someMillisecondValue);
var minute = date.getMinutes();
var hour = date.getHours();
var day = date.getDate();
var month = date.getMonth();
var year = date.getFullYear();
alert([minute, hour, day, month, year].join("\n"));
Ответ 3
Кроме того, как мне получить количество дней данного месяца?
Помимо того, что он сам вычисляет (и, следовательно, имеет право на получение високосного года), вы можете использовать расчет даты для этого:
var y= 2010, m= 11; // December 2010 - trap: months are 0-based in JS
var next= Date.UTC(y, m+1); // timestamp of beginning of following month
var end= new Date(next-1); // date for last second of this month
var lastday= end.getUTCDate(); // 31
В общем случае для расчетов timestamp/date я бы рекомендовал использовать методы Date, похожие на UTC, например getUTCSeconds
вместо getSeconds()
и Date.UTC
, чтобы получить метку времени с датой UTC, а не new Date(y, m)
, поэтому вам не нужно беспокоиться о возможности странных временных разрывов, когда изменяются правила часовых поясов.
Ответ 4
Вот еще один способ получить дату
new Date().getDate() // Get the day as a number (1-31)
new Date().getDay() // Get the weekday as a number (0-6)
new Date().getFullYear() // Get the four digit year (yyyy)
new Date().getHours() // Get the hour (0-23)
new Date().getMilliseconds() // Get the milliseconds (0-999)
new Date().getMinutes() // Get the minutes (0-59)
new Date().getMonth() // Get the month (0-11)
new Date().getSeconds() // Get the seconds (0-59)
new Date().getTime() // Get the time (milliseconds since January 1, 1970)