Як отримати поточну дату в JavaScript?


2306

Як отримати поточну дату в JavaScript?


383
var currentTime = new Date();
Хендрік

11
Дивіться документацію для об’єкта Date . Він має приклади.
Квентін

5
це допоможе вам tizag.com/javascriptT/javascriptdate.php

24
new Date()повертає поточний час , а не поточну дату . Відмінність має значення, якщо ви намагаєтеся порівняти її з іншою датою, яка не має компонента часу (тобто опівночі).
Стів Беннетт

11
використовуйте momentJs, ця ліб - це золото для розробників.
RBoschini

Відповіді:


2715

Використовуйте 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);

Це дасть вам сьогоднішню дату у форматі mm / dd / yyyy.

Просто змініть today = mm +'/'+ dd +'/'+ yyyy;потрібний формат.


7
дякую за код .. але те, що я досі не отримую, це рядок, якщо (dd <10) {dd = '0' + dd} ... чому <10? з того, що я розумію з коду, якщо символом дня менше 2, просто додайте попередній 0 перед днем ​​.. але чому 10?
imin

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
Я так не думаю :) Здається, досить просто!
Varun Natraaj

6
toJSON () повертається як utc datetime
Енді N

1
Він повертає час дати JSON. toUTCString()повертається як utc datetime.
Varun Natraaj

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) Моя особиста прихильність Я знаю табу, але чудово працює на об’єкті дати. Будьте в курсі будь-яких інших мод, які можуть виникнути у вас в об'єкті дати.

//  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 Flavour (вимагає 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'
    • 'мило' == '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'
    • 'ЄВРОПЕЙСЬКИЙ ШВОРТИЙ' == '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'
  • 'гарненько'
    • 'досить-a' == 'g: i.sA l jS \\ o \\ f FY'
    • 'pretty-b' == 'g: iA l jS \\ o \\ f FY'
    • 'досить-c' == 'n / d / Y g: iA'
    • 'досить-d' == 'n / d / Y'
    • 'досить-e' == 'F jS - g: ia'
    • 'досить-f' == 'g: iA'

Як ви можете помітити, ви можете використовувати подвійний, \щоб уникнути персонажа.



14
@KamranAhmed Майже через 2 роки та 40+ голосів пізніше, я б сказав, що зусилля того варті. Лол. З тих пір я розширював цей клас багато особисто, але не завантажував, як я вважав, що більшість людей використовуватиме цей плагін з датою js, який я бачу рекомендованим, але, мабуть, я повинен зробити його більш "загальнодоступним" і додати його сюди.
SpYk3HH

14
moment.js - це та річ, яку ви б використали сьогодні
Крістіан Стюарт

1
Вгорі є помилка друку (яка зайняла деякий час, щоб помітити), вона використовує змінну "сьогодні" у рядку: "dayOfMonth = сьогодні +"
користувач1435707

"сьогодні + (objToday.getDate () <10)? '0' + objToday.getDate () + domEnder: objToday.getDate () + domEnder" - JS - дурна мова.
Alex S

211

Найкоротший можливий.

Щоб отримати такий формат, як "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
Це здається єдиною відповіддю, яка насправді відповідає на питання. Всі інші відповідають, як відформатувати дату як рядок.
Інрего

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/


7
Підтримує локалізацію як шарм.
Risadinha

У наші дні ми використовуємо 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>


30
Момент надмірний для того, щоб просто отримати поточну дату.
Дан Даскалеску

Або moment().format("L")поважати поточний локал.
Данк

@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
chris

прохолодний розчин. має бути зверху. new Date().toLocaleDateString("de-de")робить трюк для мене.
користувач3772108

29

Чистіший, простіший варіант:

new Date().toLocaleString();

Результат залежить від місцеположення користувача :

27.02.2017 р., 9:15:41


27

Якщо ви задоволені форматом YYYY-MM-DD, це також зробить цю роботу.

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

2018-03-10


Оскільки довжина завжди фіксована, ми можемо використовувати також підрядку. new Date (). toISOString (). substring (0, 10); Можливо, буде і трохи швидше.
Mika Karjunen

23

Ви можете використовувати бібліотеку Date.js, яка розширює об'єкт Date, таким чином, ви можете використовувати метод .today ().


11
якщо ви використовуєте jquery ui з вибором дати, ви можете використовувати $ .datepicker.formatDate ('yy / mm / dd', нова дата ())
Пітер Маннінгс


16

Відповідь Варуна не враховує TimezoneOffset . Ось версія, яка робить:

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

Це TimezoneOffsetхвилини, тоді як конструктор Date займає мілісекунди, таким чином, множення на 60000.


15

Найкоротший відповідь: new Date().toJSON().slice(0,10)


Я шукав дуже просту функцію насіння, яка регулярно змінюється. Ця відповідь - справжнє задоволення.
nirazul


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',' '));


10

Якщо ви хочете простого DD/MM/YYYYформату, я просто придумав це просте рішення, хоча воно не має префіксу відсутні нулі.

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



8

Останнє редагування: 23.08.19 Бібліотека date-fns працює так само, як moment.js але має ШЛЯХ менший слід. Це дозволяє вишеньці вибрати, які функції ви хочете включити у свій проект, тому вам не доведеться збирати всю бібліотеку для форматування сьогоднішньої дати. Якщо мінімальна кількість сторонніх ліній не є варіантом для вашого проекту, я схвалюю прийняте рішення Семюеля Меддоуса вгорі.

Збереження історії нижче, оскільки вона допомогла небагатьом людям. Але для запису досить гакітно і може бути зламано без попередження, як і більшість рішень на цій посаді

EDIT 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];

край, найновіша версія та хром повернення 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 - день місяця (без головного нуля)
  • dd - день місяця (двозначний)
  • o - день року (немає провідних нулів)
  • oo - день року (тризначний)
  • D - назва дня коротке
  • DD - довга назва дня
  • м - місяць року (без головного нуля)
  • мм - місяць року (двозначний)
  • M - ім'я місяця коротке
  • ММ - назва місяця довга
  • y - рік (двозначний)
  • yy - рік (чотиризначний)

Ось посилання на jQuery datepicker


5

Найпростіший спосіб зняти це (якщо врахувати поточний часовий пояс, скориставшись формою ISO yyyy-mm-dd), це:

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

Зазвичай це досить сумісний універсальний формат дати, і ви можете перетворити його в чисте значення дати, якщо потрібно:

Date.parse(d); // 1582044297000

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 (). посилання


4

У чому полягає велика справа .. Найчистіший спосіб це зробити

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


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());

Це надрукує поточну дату у форматі dd / MM / yyyy



3

Я думаю, що це старе питання, але найпростішим способом було б наступне:

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

function CurrentTime(){
  alert(TimeStamp);
}

Це захопить поточний час, передасть його в рядок на основі розташування, і тоді ви можете викликати функцію CurrentTime для відображення часу. Це був би для мене найефективніший спосіб отримати позначку часу на щось.


Це поверне дані + час, наприклад, "2018-4-6 16:20:22", і питання полягає в тому, як отримати лише побачення.
Влад Безден
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.