Как мне получить текущую дату в JavaScript?

2309

Как мне получить текущую дату в JavaScript?

Суреш Чаганти
источник
383
var currentTime = new Date();
Хендрик
11
Смотрите документацию для объекта Date . Есть примеры.
Квентин,
5
это поможет вам tizag.com/javascriptT/javascriptdate.php
24
new Date()возвращает текущее время , а не текущую дату . Различие имеет значение, если вы пытаетесь сравнить его с другой датой, в которой нет компонента времени (т. Е. В полночь).
Стив Беннетт
11
используйте момент, эта библиотека - золото для разработчиков.
RBoschini

Ответы:

2717

Используется new Date()для создания нового Dateобъекта, содержащего текущую дату и время.

var today = new Date();
var dd = String(today.getDate()).padStart(2, '0');
var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
var yyyy = today.getFullYear();

today = mm + '/' + dd + '/' + yyyy;
document.write(today);

Это даст вам сегодняшнюю дату в формате мм / дд / гггг.

Просто измените today = mm +'/'+ dd +'/'+ yyyy;на любой формат, который вы пожелаете.

Сэмюэл Меддоус
источник
7
спасибо за код .. но что я до сих пор не понимаю, так это строка if (dd <10) {dd = '0' + dd} ... почему <10? из того, что я понимаю из кода, если символ дня меньше 2, просто добавьте предшествующий 0 перед днем ​​... но почему 10?
Имин
20
@imin: потому что меньше чем 2 символа средства 1 символов ... и все под 10 ( от 1 до 9) , 1 символ, так что мы будем иметь 01, 02, ...,09
ZFM
11
@MounaCheikhna - Как мы можем быть в 999 году?
nnnnnn
21
Поменяйте местами месяц и дату, если вы не в Северной Америке.
Марк Микаллеф
3
Новый Date.prototype.toLocaleDateString()метод является более гибким решением. Он является частью JavaScript начиная с ECMAScript 5.1 и хорошо поддерживается вечнозелеными браузерами. MDN:toLocaleDateString()
Адам Браун
443

var utc = new Date().toJSON().slice(0,10).replace(/-/g,'/');
document.write(utc);

Используйте эту replaceопцию, если вы собираетесь повторно использовать utcпеременную, например new Date(utc), Firefox и Safari не распознают дату с тире.

Варун Натраадж
источник
6
Я так не думаю :) Кажется, довольно просто!
Варун Натраадж,
6
toJSON () возвращается как utc datetime
Энди N
1
Возвращает дату и время в формате JSON. toUTCString()возвращается как utc datetime.
Варун Натрадж
25
Это не учитывает TimezoneOffset. Во время тестирования я искал «сейчас» и получил «вчера». stackoverflow.com/questions/13646446/…
mickmackusa
7
Отлично. Это самый чистый способ сделать это, я вижу здесь. Хорошо работает в MomentJS для «Сегодня, а не сейчас»moment( new Date().toJSON().slice(0, 10) )
Кайл Хотчкисс
234

ОБНОВЛЕНО! , Прокрутить вниз

Если вы хотите что-то простое красивое для конечного пользователя ... Also, fixed a small suffix issue in the first version below. Now properly returns suffix.

var objToday = new Date(),
	weekday = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'),
	dayOfWeek = weekday[objToday.getDay()],
	domEnder = function() { var a = objToday; if (/1/.test(parseInt((a + "").charAt(0)))) return "th"; a = parseInt((a + "").charAt(1)); return 1 == a ? "st" : 2 == a ? "nd" : 3 == a ? "rd" : "th" }(),
	dayOfMonth = today + ( objToday.getDate() < 10) ? '0' + objToday.getDate() + domEnder : objToday.getDate() + domEnder,
	months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'),
	curMonth = months[objToday.getMonth()],
	curYear = objToday.getFullYear(),
	curHour = objToday.getHours() > 12 ? objToday.getHours() - 12 : (objToday.getHours() < 10 ? "0" + objToday.getHours() : objToday.getHours()),
	curMinute = objToday.getMinutes() < 10 ? "0" + objToday.getMinutes() : objToday.getMinutes(),
	curSeconds = objToday.getSeconds() < 10 ? "0" + objToday.getSeconds() : objToday.getSeconds(),
	curMeridiem = objToday.getHours() > 12 ? "PM" : "AM";
var today = curHour + ":" + curMinute + "." + curSeconds + curMeridiem + " " + dayOfWeek + " " + dayOfMonth + " of " + curMonth + ", " + curYear;

document.getElementsByTagName('h1')[0].textContent = today;
<h1></h1>

ОБНОВЛЕНИЕ UBBER После долгих проволочек, я наконец-то установил GitHubbed и обновил его с помощью окончательного решения, которое я использовал для себя. У него даже были некоторые изменения в последнюю минуту, чтобы сделать его слаще! Если вы ищете старый jsFiddle, пожалуйста, посмотрите это .

Это обновление выпускается в 2 вариантах, все еще относительно небольших, хотя и не таких маленьких, как мой оригинальный ответ. Если вы хотите очень маленький, пойти с этим.
Также обратите внимание: это все еще менее раздутый, чем moment.js. Хотя moment.js хорош, imo, в нем слишком много светских методов, которые требуют изучения, как если бы это был язык. Мой здесь использует тот же общий формат, что и PHP: date .

Быстрые ссылки

Аромат 1new Date().format(String) мой личный любимый Я знаю табу, но отлично работает с объектом Date. Просто будьте в курсе любых других модов, которые у вас могут быть с объектом Date.

//  use as simple as
new Date().format('m-d-Y h:i:s');   //  07-06-2016 06:38:34

Вкус 2dateFormat(Date, String) Более традиционный метод «все в одном». Имеет все возможности предыдущего, но вызывается через метод с параметром Date.

//  use as simple as
dateFormat(new Date(), 'm-d-Y h:i:s');  //  07-06-2016 06:38:34

BONUS Flavor (требуется jQuery).$.date(Date, String) Это гораздо больше, чем просто formatопция. Он расширяет базовый объект Date и включает такие методы, как addDays. Для получения дополнительной информации, пожалуйста, смотрите Git .

В этом моде символы формата вдохновлены PHP: date . Для полного списка, пожалуйста, смотрите мой README

Этот мод также имеет гораздо более длинный список готовых форматов. Чтобы использовать готовый формат, просто введите его имя ключа.dateFormat(new Date(), 'pretty-a');

  • 'соединение'
    • 'commonLogFormat' == 'd / M / Y: G: i: s'
    • 'exif' == 'Y: m: d G: i: s'
    • 'isoYearWeek' == 'Y \\ WW'
    • 'isoYearWeek2' == 'Y - \\ WW'
    • 'isoYearWeekDay' == 'Y \\ WWj'
    • 'isoYearWeekDay2' == 'Y - \\ WW-j'
    • 'MySQL' == 'Ymd h: i: s'
    • 'postgreSQL' == 'Yz'
    • 'postgreSQL2' == 'Yz'
    • 'soap' == 'Ymd \\ TH: i: su'
    • 'soap2' == 'Ymd \\ TH: i: s.uP'
    • 'unixTimestamp' == '@U'
    • 'xmlrpc' == 'Ymd \\ TG: i: s'
    • 'xmlrpcCompact' == 'Ymd \\ tGis'
    • 'wddx' == 'Ynj \\ TG: i: s'
  • «константы»
    • 'AMERICAN' == 'F j Y'
    • «АМЕРИКАНСКИЙ КОРЗИНУ» == «М / Д / Г»
    • 'AMERICANSHORTWTIME' == 'm / d / Y h: i: sA'
    • 'ATOM' == 'Ymd \\ TH: i: sP'
    • 'COOKIE' == 'l dMY H: i: s T'
    • 'ЕВРОПЕЙСКИЙ' == 'j FY'
    • "ЕВРОПЕЙСКИЙ ХОРТ" == "dmY"
    • 'EUROPEANSHORTWTIME' == 'dmY H: i: s'
    • 'ISO8601' == 'Ymd \\ TH: i: sO'
    • 'ЮРИДИЧЕСКИЙ' == 'j FY'
    • 'RFC822' == 'D d M y H: i: s O'
    • 'RFC850' == 'l dMy H: i: s T'
    • 'RFC1036' == 'D d M y H: i: s O'
    • 'RFC1123' == 'D d MYH: i: s O'
    • 'RFC2822' == 'D d MYH: i: s O'
    • 'RFC3339' == 'Ymd \\ TH: i: sP'
    • 'RSS' == 'D d MYH: i: s O'
    • 'W3C' == 'Ymd \\ TH: i: sP'
  • 'хорошенький'
    • 'pretty-a' == 'g: i.sA l jS \\ o \\ f FY'
    • 'pretty-b' == 'g: iA l jS \\ o \\ f FY'
    • 'pretty-c' == 'n / d / Y g: iA'
    • 'pretty-d' == 'n / d / Y'
    • 'pretty-e' == 'F jS - g: ia'
    • 'pretty-f' == 'g: iA'

Как вы можете заметить, вы можете использовать double, \чтобы убежать от персонажа.


SpYk3HH
источник
14
@KamranAhmed Спустя почти 2 года и более 40 голосов, я бы сказал, что усилия того стоили. Лол. С тех пор я расширил этот класс лично, но не загрузил, так как я думал, что большинство людей будет использовать этот другой плагин для даты, который я рекомендую, но я думаю, я должен сделать его более «публичным» и добавить его здесь.
SpYk3HH
14
момент.js теперь то, что вы будете использовать в эти дни
Кристиан Стюарт
1
Выше приведена опечатка (это заняло у меня некоторое время), в строке используется переменная «today»: «dayOfMonth = today +»
user1435707
"today + (objToday.getDate () <10)? '0' + objToday.getDate () + domEnder: objToday.getDate () + domEnder" - JS - глупый язык.
Алекс С
212

Самый короткий из возможных.

Чтобы получить формат как "2018-08-03":

let today = new Date().toISOString().slice(0, 10)

console.log(today)

Чтобы получить формат как "3/8/2018":

let today = new Date().toLocaleDateString()

console.log(today)

Кроме того, вы можете передать локаль в качестве аргумента, например toLocaleDateString("sr"), и т. Д.

Дамжан Павлица
источник
3
Это все еще не удается из-за сдвига часового пояса.
LStarky
7
Почему это не принятый ответ, самый простой и использует встроенные функции
жизнь
171

Если вы просто хотите дату без информации о времени, используйте:

var today = new Date();
    today.setHours(0, 0, 0, 0);

document.write(today);

маршал
источник
40
Кажется, это единственный ответ, который на самом деле отвечает на вопрос. Все остальные отвечают о том, как отформатировать дату в виде строки.
Inrego
1
Согласен. На самом деле я хотел написать ответ, похожий на этот, и затем появилось небольшое окно, спрашивающее, прочитал ли я все ответы. Так как я прочитал только лучшие ответы, я решил проверить, есть ли какие-либо правильные ответы, и этот был первым правильным ответом.
Арпад
Это устанавливает часы с использованием UTC, что может работать не во всех случаях использования.
Маккей
103

Попробуй это:

var currentDate = new Date()
var day = currentDate.getDate()
var month = currentDate.getMonth() + 1
var year = currentDate.getFullYear()
document.write("<b>" + day + "/" + month + "/" + year + "</b>")

Результат будет как

15/2/2012
Джимми М
источник
67

Если вы ищете более детальный контроль над форматами даты, я настоятельно рекомендую проверить моменты. Потрясающая библиотека - и только 5 КБ. http://momentjs.com/

benjamin.keen
источник
7
Поддерживает локализацию как шарм.
Рисадинья
В наши дни мы используем date-fns - он обрабатывает даты как неизменяемые (момент изменяет даты), работает быстрее и является модульным (просто импортируйте то, что вам нужно).
Freewalker
2
Через шесть лет после публикации этот момент прибавил в весе. Вы можете вместо этого проверить github.com/iamkun/dayjs - мне это описали как «моменты на диете». Тот же простой API.
benjamin.keen
55

Вы можете использовать moment.js: http://momentjs.com/

var m = moment().format("DD/MM/YYYY");

document.write(m);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>

Morad
источник
30
Момент излишний для получения текущей даты.
Дан Даскалеску
Или moment().format("L")уважать текущую локаль.
Dunc
@DanDascalescu На самом деле базовая спецификация Javascript для DateTime очень плохая.
Тодд
Если у вас уже есть импортированные моменты в вашем проекте, то это самый простой и простой ответ.
Адил Х. Раза
52

var d = (new Date()).toString().split(' ').splice(1,3).join(' ');

document.write(d)

Чтобы разбить его на шаги:

  1. (new Date()).toString() дает "Пт 28 июня 2013 15:30:18 GMT-0700 (PDT)"

  2. (new Date()).toString().split(' ') делит вышеупомянутую строку на каждый пробел и возвращает массив следующим образом: ["Fri", "Jun", "28", "2013", "15:31:14", "GMT-0700", "(PDT)" ]

  3. (new Date()).toString().split(' ').splice(1,3).join(' ') берет второе, третье и четвертое значения из вышеуказанного массива, объединяет их с пробелами и возвращает строку «28 июня 2013»

Ришабх Марья
источник
2
Мне нужно было время в 00:00:00, и я не хотел перестраивать его вручную; шаг 2 приводит меня туда отлично. Престижность!
Панхандель
3
Вы можете сохранить несколько байтов, сделав это:Date().split(' ').splice(1,3).join(' ')
Hyde
47

Это работает каждый раз:

    var now = new Date();
    var day = ("0" + now.getDate()).slice(-2);
    var month = ("0" + (now.getMonth() + 1)).slice(-2);
    var today = now.getFullYear() + "-" + (month) + "-" + (day);
    
    console.log(today);

Рошан
источник
45
var date = new Date().toLocaleDateString("en-US");

Также вы можете вызвать метод toLocaleDateStringс двумя параметрами:

var date = new Date().toLocaleDateString("en-US", {
    "year": "numeric",
    "month": "numeric"
});

Статья на MSDN . Подробнее об этом методе на MDN .

Дунаевский Максим
источник
Здорово, работает на Chrome. К сожалению, не работает на PhantomJS с 22/4/2016
Крис
классное решение. должно быть на вершине. new Date().toLocaleDateString("de-de")делает трюк для меня.
user3772108
29

Более чистая и простая версия:

new Date().toLocaleString();

Результат зависит от локали пользователя :

27.02.2017, 9:15:41

Одед Брейнер
источник
27

Если вас устраивает формат ГГГГ-ММ-ДД, это тоже подойдет.

new Date().toISOString().split('T')[0]

2018-03-10

Аунг Хтет
источник
Поскольку длина всегда фиксирована, мы также можем использовать подстроку. новая дата (). toISOString (). подстрока (0, 10); Может быть немного быстрее.
Мика Карьюнен
23

Вы можете использовать библиотеку Date.js, которая расширяет объект Date, поэтому у вас может быть метод .today ().

eomeroff
источник
11
если вы используете jquery ui с датчиком, вы можете использовать $ .datepicker.formatDate ('гг / мм / дд', новая дата ())
Питер Маннингс
16

Ответ Варуна не учитывает TimezoneOffset . Вот версия, которая делает:

var d = new Date()
new Date(d.getTime() - d.getTimezoneOffset() * 60000).toJSON().slice(0, 10) // 2015-08-11

Это TimezoneOffsetминуты, а конструктор Date занимает миллисекунды, то есть умножение на 60000.

user1338062
источник
15

Кратчайший ответ: new Date().toJSON().slice(0,10)

Блэр Андерсон
источник
Я искал очень простую функцию семени, которая регулярно меняется. Этот ответ - настоящее удовольствие.
nirazul
11
new Date().toDateString();

Результат:

«Ср 3 февраля 2016»

Isayevskiy_Sergey
источник
11

Так же toISOString()будет возвращено только текущее время UTC, а не местное время. Мы должны сделать дату, используя функцию .toString (), чтобы получить дату в yyyy-MM-ddтаком формате, как

document.write(new Date(new Date().toString().split('GMT')[0]+' UTC').toISOString().split('T')[0]);

Чтобы ввести дату и время в yyyy-MM-ddTHH:mm:ssформате

document.write(new Date(new Date().toString().split('GMT')[0]+' UTC').toISOString().split('.')[0]);

Чтобы ввести дату и время в yyyy-MM-dd HH:mm:ssформате

document.write(new Date(new Date().toString().split('GMT')[0]+' UTC').toISOString().split('.')[0].replace('T',' '));

jafarbtech
источник
10

Если вам нужен простой DD/MM/YYYYформат, я просто придумала это простое решение, хотя оно не содержит префикс пропущенных нулей.

var d = new Date();
document.write( [d.getDate(), d.getMonth()+1, d.getFullYear()].join('/') );

Фил Рикеттс
источник
9
new Date().toISOString().slice(0,10); 

будет работать тоже

Toucouleur
источник
8

ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ: 23.08.19. Библиотека date-fns работает так же, как moment.js, но имеет гораздо меньше места. Он позволяет вам выбирать, какие функции вы хотите включить в свой проект, чтобы вам не приходилось собирать всю библиотеку для форматирования сегодняшней даты. Если минимальная сторонняя библиотека не подходит для вашего проекта, я одобряю принятое Сэмюэлем Меддоусом решение сверху.

Сохранение истории ниже, потому что это помогло нескольким людям. Но, к сведению, он довольно хакерский и может сломаться без предупреждения, как и большинство решений в этом посте.

РЕДАКТИРОВАТЬ 2/7/2017 Однострочное решение JS:

tl; dr

var todaysDate = new Date(Date.now()).toLocaleString().slice(0,3).match(/[0-9]/i) ? new Date(Date.now()).toLocaleString().split(' ')[0].split(',')[0] : new Date(Date.now()).toLocaleString().split(' ')[1] + " " + new Date(Date.now()).toLocaleString().split(' ')[2] + " " + new Date(Date.now()).toLocaleString().split(' ')[3];

edge, ff latest, & chrome return todaysDate = "2/7/2017"
"работает" * в IE10 +

объяснение

Я обнаружил, что IE10 и IE Edge делают вещи немного по-другому ... пойди разберись. с new Date(Date.now()).toLocaleString()вводом,

IE10 возвращает:

"Tuesday, February 07, 2017 2:58:25 PM"

Я мог бы написать большую длинную функцию и FTFY. Но вы действительно должны использовать moment.js для этого. Мой сценарий просто очищает это и дает вам расширенную традиционную нотацию США:> todaysDate = "March 06, 2017"

IE EDGE возвращает:

"‎2‎/‎7‎/‎2017‎ ‎2‎:‎59‎:‎27‎ ‎PM"

Конечно, это не может быть так просто. Строка даты Edge содержит невидимые символы «•» между каждым видимым. Так что теперь мы будем проверять, не является ли первый символ числом, а первые 3 символа, поскольку оказывается, что любой отдельный символ во всем диапазоне дат в конечном итоге будет точкой или косой чертой в некоторой точке. Так что для простоты, просто .slice () первые три символа (крошечный буфер против будущих махинаций), а затем проверяйте числа. Вероятно, следует отметить, что эти невидимые точки могут потенциально сохраняться в вашем коде. Возможно, я бы покопался в этом, если бы у вас были большие планы, чем просто распечатать эту строку для вашего просмотра.

∴ обновлен однострочник:

var todaysDate = new Date(Date.now()).toLocaleString().slice(0,3).match(/[0-9]/i) ? new Date(Date.now()).toLocaleString().split(' ')[0].split(',')[0] : new Date(Date.now()).toLocaleString().split(' ')[1] + " " + new Date(Date.now()).toLocaleString().split(' ')[2] + " " + new Date(Date.now()).toLocaleString().split(' ')[3];

Это отстой, чтобы читать. Как насчет:

var dateString = new Date(Date.now()).toLocaleString();
var todaysDate = dateString.slice(0,3).match(/[0-9]/i) ? dateString.split(' ')[0].split(',')[0] : dateString.split(' ')[1] + " " + dateString.split(' ')[2] + " " + dateString.split(' ')[3];

ОРИГИНАЛЬНЫЙ ОТВЕТ

У меня есть одна строка для вас:

new Date(Date.now()).toLocaleString().split(', ')[0];

и [1]даст вам время суток.

Кэмерон Донахью
источник
7

Вы можете использовать это

<script>
function my_curr_date() {      
    var currentDate = new Date()
    var day = currentDate.getDate();
    var month = currentDate.getMonth() + 1;
    var year = currentDate.getFullYear();
    var my_date = month+"-"+day+"-"+year;
    document.getElementById("dateField").value=my_date;    
}
</script>

HTML-код

<body onload='return my_curr_date();'>
    <input type='text' name='dateField' id='dateField' value='' />
</body>
Роджер
источник
6

Если вы используете JQuery. Попробуйте этот лайнер:

$.datepicker.formatDate('dd/mm/yy', new Date());

Вот соглашение для форматирования даты

  • d - день месяца (без начального нуля)
  • дд - день месяца (две цифры)
  • o - день года (без начальных нулей)
  • oo - день года (три цифры)
  • D - название дня короткое
  • ДД - длинное имя
  • m - месяц года (без нуля в начале)
  • мм - месяц года (две цифры)
  • М - название месяца короткое
  • MM - название месяца
  • y - год (две цифры)
  • гг - год (четыре цифры)

Вот ссылка для jQuery DatePicker

Souvik
источник
5

Простой способ сделать это (учитывая текущий часовой пояс, использующий формат ISO гггг-мм-дд):

let d = new Date().toISOString().substring(0,19).replace("T"," ") // "2020-02-18 16:41:58"

Обычно это довольно универсальный совместимый формат даты, и при необходимости вы можете преобразовать его в чистое значение даты:

Date.parse(d); // 1582044297000
Caiuby Freitas
источник
4

Вы можете оформить заказ

var today = new Date();
today = parseInt(today.getMonth()+1)+'/'+today.getDate()+'/'+today.getFullYear()+"\nTime : "+today.getHours()+":"+today.getMinutes()+":"+today.getSeconds();
document.write(today);

И посмотрите документацию для конструктора Date (). ссылка на сайт

Akhil
источник
4

Что в этом такого? .. Самый чистый способ сделать это

var currentDate=new Date().toLocaleString().slice(0,10);

ISONecroMAn
источник
1
Это вернет ошибки, как это 3/4/2018, , лучше использовать new Date().toJSON().slice(0,10).
DevonDahon
Это идеально подходит для простого получения даты для просмотра или для информации в журнале консоли или для пользовательского интерфейса. Лучше для меня без.slice(0,10)
Пол Карлтон
4

Это может помочь вам

var date = new Date();
console.log(date.getDate()+'/'+(date.getMonth()+1)+'/'+date.getFullYear());

Будет напечатана текущая дата в формате дд / мм / гггг

Джаянт Патил
источник
4

Это хорошо, чтобы получить отформатированную дату

let date = new Date().toLocaleDateString("en", {year:"numeric", day:"2-digit", month:"2-digit"});
console.log(date);

Югандхар Чаудхари
источник
3

Я думаю, что это старый вопрос, но самый простой способ будет следующим:

var date = new Date();
var TimeStamp = date.toLocaleString();

function CurrentTime(){
  alert(TimeStamp);
}

Это захватит текущее время, передаст его в строку на основе местоположения, а затем вы можете вызвать функцию CurrentTime для отображения времени. Для меня это был бы самый эффективный способ получить отметку времени для чего-либо.

Брок Дэвис
источник
Это вернет данные + время, например. «2018-4-6 16:20:22», и вопрос в том, как получить только дату.
Влад Безден,