Как я могу отформатировать объект даты JavaScript для печати как 10-Aug-2010
?
Внимание: Ниже приведены более качественные ответы. Этот ответ был написан в 2010 году, и с тех пор появились новые и лучшие решения. ОП должен принять другой ответ.
function formatDate(date) {
var monthNames = [
"January", "February", "March",
"April", "May", "June", "July",
"August", "September", "October",
"November", "December"
];
var day = date.getDate();
var monthIndex = date.getMonth();
var year = date.getFullYear();
return day + ' ' + monthNames[monthIndex] + ' ' + year;
}
console.log(formatDate(new Date())); // show current date-time in console
Вы можете редактировать массив monthNames
чтобы использовать Jan, Feb, Mar и т.д.
Date
, как я это сделал на stackoverflow.com/questions/3187790/…
toLocaleDateString()
Метод toLocaleDateString()
возвращает строку с чувствительным к языку представлением части даты даты. Аргументы locales и options позволяют приложениям указывать язык, для которого должны использоваться соглашения о форматировании, и позволяют настраивать поведение функции.
Все эти ключи являются необязательными. Вы можете изменить количество значений параметров в соответствии с вашими требованиями, и это также будет отражать наличие каждой даты и времени.
Примечание. Если вы хотите настроить только параметры содержимого, но при этом использовать текущую локаль, передача null
для первого параметра вызовет ошибку. Вместо этого используйте undefined
.
Вы можете использовать больше вариантов языка.
var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
var today = new Date();
console.log(today.toLocaleDateString("en-US")); // 9/17/2016
console.log(today.toLocaleDateString("en-US", options)); // Saturday, September 17, 2016
console.log(today.toLocaleDateString("hi-IN", options)); // शनिवार, 17 सितंबर 2016
Вы также можете использовать метод toLocaleString()
для той же цели. Разница лишь в том, что эта функция обеспечивает время, когда вы не передаете никаких опций.
// Example
9/17/2016, 1:21:34 PM
toLocaleString
/ toLocaleDateString
... Метод toDateString
не принимает никаких параметров. developer.mozilla.org/de/docs/Web/JavaScript/Reference/...
moment.js
для простого формата. К счастью, сделал дополнительный поиск в Google и обнаружил, что для этого уже существует нативный API. Сохранена внешняя зависимость. Потрясающие!
Используйте date.format library:
var dateFormat = require('dateformat');
var now = new Date();
dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT");
возвращает:
Saturday, June 9th, 2007, 5:46:21 PM
Если вам нужно быстро форматировать дату, используя обычный JavaScript, используйте getDate
, getMonth + 1
, getFullYear
, getHours
и getMinutes
:
var d = new Date();
var datestring = d.getDate() + "-" + (d.getMonth()+1) + "-" + d.getFullYear() + " " +
d.getHours() + ":" + d.getMinutes();
// 16-5-2015 9:50
Или, если вам нужно, чтобы он дополнялся нулями:
var datestring = ("0" + d.getDate()).slice(-2) + "-" + ("0"+(d.getMonth()+1)).slice(-2) + "-" +
d.getFullYear() + " " + ("0" + d.getHours()).slice(-2) + ":" + ("0" + d.getMinutes()).slice(-2);
// 16-05-2015 09:50
Ну, я хотел был преобразовать сегодняшнюю дату в MySQL дружественную строку даты, например 2012-06-23, и использовать эту строку в качестве параметра в одном из моих запросов. Простым решением, которое я нашел, является следующее:
var today = new Date().toISOString().slice(0, 10);
Имейте в виду, что указанное выше решение не учитывает ваше смещение часового пояса.
Вместо этого вы можете использовать эту функцию:
function toJSONLocal (date) {
var local = new Date(date);
local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
return local.toJSON().slice(0, 10);
}
Это даст вам правильную дату, если вы выполняете этот код в начале/конце дня.
new Date(date + " UTC")
чтобы обмануть часовой пояс, и вы можете удалить строку setMinutes. Человек, яваскрипт грязный
Для фиксированных форматов простую функцию выполняет задание. В следующем примере создается международный формат ГГГГ-ММ-ДД:
function dateToYMD(date) {
var d = date.getDate();
var m = date.getMonth() + 1; //Month from 0 to 11
var y = date.getFullYear();
return '' + y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
}
console.log(dateToYMD(new Date(2017,10,5))); // Nov 5
Формат OP может быть сгенерирован следующим образом:
function dateToYMD(date) {
var strArray=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
var d = date.getDate();
var m = strArray[date.getMonth()];
var y = date.getFullYear();
return '' + (d <= 9 ? '0' + d : d) + '-' + m + '-' + y;
}
console.log(dateToYMD(new Date(2017,10,5))); // Nov 5
Примечание. Однако, как правило, не рекомендуется распространять стандартные библиотеки JavaScript (например, добавив эту функцию в прототип даты).
Более продвинутая функция может генерировать настраиваемый вывод на основе параметра формата.
Если написать функцию форматирования слишком долго, существует множество библиотек, вокруг которых это делается. Некоторые другие ответы уже перечисляют их. Но растущие зависимости также имеют противоположную часть.
С более поздними версиями ECMAScript класс Date
имеет определенные функции форматирования:
toDateString: зависит от реализации, показывается только дата.
http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.todatestring
new Date().toDateString(); // e.g. "Fri Nov 11 2016"
toISOString. Показывать дату и время ISO 8601.
http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.toisostring
new Date().toISOString(); // e.g. "2016-11-21T08:00:00.000Z"
toJSON: Stringifier для JSON.
http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tojson
new Date().toJSON(); // e.g. "2016-11-21T08:00:00.000Z"
toLocaleDateString: зависит от реализации, дата в формате локали.
http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaledatestring
new Date().toLocaleDateString(); // e.g. "21/11/2016"
toLocaleString: зависит от реализации, дата и время в формате локали.
http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocalestring
new Date().toLocaleString(); // e.g. "21/11/2016, 08:00:00 AM"
toLocaleTimeString: зависит от реализации, время в формате локали.
http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaletimestring
new Date().toLocaleTimeString(); // e.g. "08:00:00 AM"
toString: общий параметр toString для даты.
http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tostring
new Date().toString(); // e.g. "Fri Nov 21 2016 08:00:00 GMT+0100 (W. Europe Standard Time)"
Примечание. Возможно создание пользовательского вывода из этих форматирования >
new Date().toISOString().slice(0,10); //return YYYY-MM-DD
Примеры фрагментов:
console.log("1) "+ new Date().toDateString());
console.log("2) "+ new Date().toISOString());
console.log("3) "+ new Date().toJSON());
console.log("4) "+ new Date().toLocaleDateString());
console.log("5) "+ new Date().toLocaleString());
console.log("6) "+ new Date().toLocaleTimeString());
console.log("7) "+ new Date().toString());
console.log("8) "+ new Date().toISOString().slice(0,10));
Если вы уже используете jQuery UI в своем проекте, вы можете сделать это следующим образом:
var formatted = $.datepicker.formatDate("M d, yy", new Date("2014-07-08T09:02:21.377"));
// formatted will be 'Jul 8, 2014'
Некоторые параметры формата даты датпикера для воспроизведения доступны здесь.
Я думаю, вы можете просто использовать нестандартный метод Date toLocaleFormat(formatString)
formatString: Строка формата в том же формате, что и функция strftime()
в C.
var today = new Date();
today.toLocaleFormat('%d-%b-%Y'); // 30-Dec-2011
Литература:
Обычный JavaScript - лучший выбор для небольших onetimers.
С другой стороны, если вам нужно больше материала даты, MomentJS - отличное решение.
Например:
moment().format('YYYY-MM-DD HH:m:s'); // now() -> 2015-03-24 14:32:20
moment("20111031", "YYYYMMDD").fromNow(); // 3 years ago
moment("20120620", "YYYYMMDD").fromNow(); // 3 years ago
moment().startOf('day').fromNow(); // 11 hours ago
moment().endOf('day').fromNow(); // in 13 hours
В современных браузерах (*) вы можете просто сделать это:
var today = new Date().toLocaleDateString('en-GB', {
day : 'numeric',
month : 'short',
year : 'numeric'
}).split(' ').join('-');
Вывод, если выполняется сегодня (24 января 2016 года):
'24-Jan-2016'
(*) Согласно MDN, "современные браузеры" означают Chrome 24+, Firefox 29+, Internet Explorer 11, Edge 12+, Opera 15+ и Safari ночная сборка. p >
Вы должны посмотреть date.js. Он добавляет много удобных помощников для работы с датами, например, в вашем случае:
var date = Date.parse('2010-08-10');
console.log(date.toString('dd-MMM-yyyy'));
Начало работы: http://www.datejs.com/2007/11/27/getting-started-with-datejs/
Я могу получить ваш запрошенный формат в одной строке без использования библиотек и методов Date, просто regex:
var d = (new Date()).toString().replace(/\S+\s(\S+)\s(\d+)\s(\d+)\s.*/,'$2-$1-$3');
// date will be formatted as "14-Oct-2015" (pass any date object in place of 'new Date()')
Обновление. Как указывал @RobG, вывод Date.prototype.toString() зависит от реализации. Поэтому используйте это с осторожностью и при необходимости измените, если вы используете это решение. В моем тестировании это надежно работает в Северной Америке, где основные браузеры (Chrome, Safari, Firefox и IE) возвращают одинаковый формат строк.
console.log(new Date().toString().replace(/\S+\s(\S+)\s(\d+)\s(\d+)\s.*/,'$2-$1-$3'));
@Sébastien - альтернативная поддержка всех браузеров
new Date(parseInt(496407600)*1000).toLocaleDateString('de-DE', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
}).replace(/\./g, '/');
Документация: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString
new Date().toLocaleDateString("en-EN", {month: "short", weekday: "short", day: "2-digit", year: "numeric"})
возвращает "Wed, Sep 06, 2017"
Использование шаблона строки ECMAScript Edition 6 (ES6/ES2015):
let d = new Date();
let formatted = '${d.getFullYear()}-${d.getMonth() + 1}-${d.getDate()}';
Если вам нужно изменить разделители:
const delimiter = '/';
let formatted = [d.getFullYear(), d.getMonth() + 1, d.getDate()].join(delimiter);
Вот код, который я только что написал для обработки форматирования даты для проекта, над которым я работаю. Он имитирует функциональность форматирования даты PHP в соответствии с моими потребностями. Не стесняйтесь использовать его, просто расширяя уже существующий объект Date(). Это может быть не самое элегантное решение, но оно работает для моих нужд.
var d = new Date();
d_string = d.format("m/d/Y h:i:s");
/**************************************
* Date class extension
*
*/
// Provide month names
Date.prototype.getMonthName = function(){
var month_names = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'
];
return month_names[this.getMonth()];
}
// Provide month abbreviation
Date.prototype.getMonthAbbr = function(){
var month_abbrs = [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec'
];
return month_abbrs[this.getMonth()];
}
// Provide full day of week name
Date.prototype.getDayFull = function(){
var days_full = [
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday'
];
return days_full[this.getDay()];
};
// Provide full day of week name
Date.prototype.getDayAbbr = function(){
var days_abbr = [
'Sun',
'Mon',
'Tue',
'Wed',
'Thur',
'Fri',
'Sat'
];
return days_abbr[this.getDay()];
};
// Provide the day of year 1-365
Date.prototype.getDayOfYear = function() {
var onejan = new Date(this.getFullYear(),0,1);
return Math.ceil((this - onejan) / 86400000);
};
// Provide the day suffix (st,nd,rd,th)
Date.prototype.getDaySuffix = function() {
var d = this.getDate();
var sfx = ["th","st","nd","rd"];
var val = d%100;
return (sfx[(val-20)%10] || sfx[val] || sfx[0]);
};
// Provide Week of Year
Date.prototype.getWeekOfYear = function() {
var onejan = new Date(this.getFullYear(),0,1);
return Math.ceil((((this - onejan) / 86400000) + onejan.getDay()+1)/7);
}
// Provide if it is a leap year or not
Date.prototype.isLeapYear = function(){
var yr = this.getFullYear();
if ((parseInt(yr)%4) == 0){
if (parseInt(yr)%100 == 0){
if (parseInt(yr)%400 != 0){
return false;
}
if (parseInt(yr)%400 == 0){
return true;
}
}
if (parseInt(yr)%100 != 0){
return true;
}
}
if ((parseInt(yr)%4) != 0){
return false;
}
};
// Provide Number of Days in a given month
Date.prototype.getMonthDayCount = function() {
var month_day_counts = [
31,
this.isLeapYear() ? 29 : 28,
31,
30,
31,
30,
31,
31,
30,
31,
30,
31
];
return month_day_counts[this.getMonth()];
}
// format provided date into this.format format
Date.prototype.format = function(dateFormat){
// break apart format string into array of characters
dateFormat = dateFormat.split("");
var date = this.getDate(),
month = this.getMonth(),
hours = this.getHours(),
minutes = this.getMinutes(),
seconds = this.getSeconds();
// get all date properties ( based on PHP date object functionality )
var date_props = {
d: date < 10 ? '0'+date : date,
D: this.getDayAbbr(),
j: this.getDate(),
l: this.getDayFull(),
S: this.getDaySuffix(),
w: this.getDay(),
z: this.getDayOfYear(),
W: this.getWeekOfYear(),
F: this.getMonthName(),
m: month < 10 ? '0'+(month+1) : month+1,
M: this.getMonthAbbr(),
n: month+1,
t: this.getMonthDayCount(),
L: this.isLeapYear() ? '1' : '0',
Y: this.getFullYear(),
y: this.getFullYear()+''.substring(2,4),
a: hours > 12 ? 'pm' : 'am',
A: hours > 12 ? 'PM' : 'AM',
g: hours % 12 > 0 ? hours % 12 : 12,
G: hours > 0 ? hours : "12",
h: hours % 12 > 0 ? hours % 12 : 12,
H: hours,
i: minutes < 10 ? '0' + minutes : minutes,
s: seconds < 10 ? '0' + seconds : seconds
};
// loop through format array of characters and add matching data else add the format character (:,/, etc.)
var date_string = "";
for(var i=0;i<dateFormat.length;i++){
var f = dateFormat[i];
if(f.match(/[a-zA-Z]/g)){
date_string += date_props[f] ? date_props[f] : '';
} else {
date_string += f;
}
}
return date_string;
};
/*
*
* END - Date class extension
*
************************************/
Если вы используете jQuery UI в своем коде, есть встроенная функция под названием formatDate()
. Я использую его таким образом, чтобы форматировать сегодняшнюю дату:
var testdate = Date();
testdate = $.datepicker.formatDate( "d-M-yy",new Date(testdate));
alert(testdate);
Вы можете увидеть много других примеров даты форматирования в документации по jQuery UI.
У нас есть много решений для этого, но я думаю, что лучший из них - Moment.js. Поэтому я лично предлагаю использовать Moment.js для операций даты и времени.
console.log(moment().format('DD-MMM-YYYY'));
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>
Вот как я применил мои плагины npm
var monthNames = [
"January", "February", "March",
"April", "May", "June", "July",
"August", "September", "October",
"November", "December"
];
var Days = [
"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"
];
var formatDate = function(dt,format){
format = format.replace('ss', pad(dt.getSeconds(),2));
format = format.replace('s', dt.getSeconds());
format = format.replace('dd', pad(dt.getDate(),2));
format = format.replace('d', dt.getDate());
format = format.replace('mm', pad(dt.getMinutes(),2));
format = format.replace('m', dt.getMinutes());
format = format.replace('MMMM', monthNames[dt.getMonth()]);
format = format.replace('MMM', monthNames[dt.getMonth()].substring(0,3));
format = format.replace('MM', pad(dt.getMonth()+1,2));
format = format.replace(/M(?![ao])/, dt.getMonth()+1);
format = format.replace('DD', Days[dt.getDay()]);
format = format.replace(/D(?!e)/, Days[dt.getDay()].substring(0,3));
format = format.replace('yyyy', dt.getFullYear());
format = format.replace('YYYY', dt.getFullYear());
format = format.replace('yy', (dt.getFullYear()+"").substring(2));
format = format.replace('YY', (dt.getFullYear()+"").substring(2));
format = format.replace('HH', pad(dt.getHours(),2));
format = format.replace('H', dt.getHours());
return format;
}
pad = function(n, width, z) {
z = z || '0';
n = n + '';
return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}
Если вы хотите использовать одно решение для всех, я настоятельно рекомендую использовать момент .js, который также выполняет форматирование во многих локалях/языках и множество других функций.
Установить:
npm install moment
или npm install moment
yarn add moment
(см. ссылку на другие способы установки)
Пример:
moment("2010-08-10").format("DD-MMM-YYYY")
Урожайность:
10-августа-2010
Ручное решение
Используя форматирование, аналогичное Moment.js, Class DateTimeFormatter (Java) и Class SimpleDateFormat (Java), я реализовал комплексное решение formatDate(date, patternStr)
котором код легко читать и изменять. Вы можете отобразить дату, время, AM/PM и т.д. См. Код для большего количества примеров.
Пример:
formatDate(new Date(), 'EEEE, MMMM d, yyyy HH:mm:ss:S')
(formatDate
реализовано в фрагменте кода ниже)
Урожайность:
Пятница, 12 октября 2018 года 18: 11: 23: 445
Попробуйте ввести код, нажав "Выполнить фрагмент кода".
Шаблоны даты и времени
yy
= год из двух цифр; yyyy
= полный год
M
= разрядный месяц; MM
= двузначный месяц; MMM
= короткое название месяца; MMMM
= полное название месяца
EEEE
= полное название дня недели; EEE
= короткое название дня недели
d
= цифра день; dd
= двухзначный день
h
= часы утра/вечера; hh
= двузначные часы утра/вечера; H
= часы; HH
= двузначные часы
m
= минуты; mm
= двузначные минуты; aaa
= AM/PM
s
= секунды; ss
= 2-значные секунды
S
= миллисекунды
var monthNames = [
"January", "February", "March", "April", "May", "June", "July",
"August", "September", "October", "November", "December"
];
var dayOfWeekNames = [
"Sunday", "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday", "Saturday"
];
function formatDate(date, patternStr){
if (!patternStr) {
patternStr = 'M/d/yyyy';
}
var day = date.getDate(),
month = date.getMonth(),
year = date.getFullYear(),
hour = date.getHours(),
minute = date.getMinutes(),
second = date.getSeconds(),
miliseconds = date.getMilliseconds(),
h = hour % 12,
hh = twoDigitPad(h),
HH = twoDigitPad(hour),
mm = twoDigitPad(minute),
ss = twoDigitPad(second),
aaa = hour < 12 ? 'AM' : 'PM',
EEEE = dayOfWeekNames[date.getDay()],
EEE = EEEE.substr(0, 3),
dd = twoDigitPad(day),
M = month + 1,
MM = twoDigitPad(M),
MMMM = monthNames[month],
MMM = MMMM.substr(0, 3),
yyyy = year + "",
yy = yyyy.substr(2, 2)
;
return patternStr
.replace('hh', hh).replace('h', h)
.replace('HH', HH).replace('H', hour)
.replace('mm', mm).replace('m', minute)
.replace('ss', ss).replace('s', second)
.replace('S', miliseconds)
.replace('dd', dd).replace('d', day)
.replace('MMMM', MMMM).replace('MMM', MMM).replace('MM', MM).replace('M', M)
.replace('EEEE', EEEE).replace('EEE', EEE)
.replace('yyyy', yyyy)
.replace('yy', yy)
.replace('aaa', aaa)
;
}
function twoDigitPad(num) {
return num < 10 ? "0" + num : num;
}
console.log(formatDate(new Date()));
console.log(formatDate(new Date(), 'dd-MMM-yyyy')); //OP request
console.log(formatDate(new Date(), 'EEEE, MMMM d, yyyy HH:mm:ss.S aaa'));
console.log(formatDate(new Date(), 'EEE, MMM d, yyyy HH:mm'));
console.log(formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss.S'));
console.log(formatDate(new Date(), 'M/dd/yyyy h:mmaaa'));
SimpleDateFormat
был вытеснен несколько лет назад классом java.time.format.DateTimeFormatter
.
JavaScript-решение без использования каких-либо внешних библиотек:
var now = new Date()
months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
var formattedDate = now.getDate()+"-"+months[now.getMonth()]+"-"+now.getFullYear()
alert(formattedDate)
Полезный и гибкий способ форматирования DateTimes в JavaScript - это Intl.DateTimeFormat
:
var date = new Date();
var options = { year: 'numeric', month: 'short', day: '2-digit'};
var _resultDate = new Intl.DateTimeFormat('en-GB', options).format(date);
// The _resultDate is: "12 Oct 2017"
// Replace all spaces with - and then log it.
console.log(_resultDate.replace(/ /g,'-'));
Результат: "12-Oct-2017"
Форматы даты и времени можно настроить с помощью аргумента параметров.
Объект Intl.DateTimeFormat
- это конструктор для объектов, которые поддерживают форматирование даты и времени с учетом языка.
Синтаксис
new Intl.DateTimeFormat([locales[, options]])
Intl.DateTimeFormat.call(this[, locales[, options]])
параметры
локали
Необязательный. Строка с языковым тегом BCP 47 или массив таких строк. Для общей формы и интерпретации аргумента locales см. Страницу Intl. Следующие ключи расширения Unicode разрешены:
nu
Numbering system. Possible values include: "arab", "arabext", "bali", "beng", "deva", "fullwide", "gujr", "guru", "hanidec", "khmr", "knda", "laoo", "latn", "limb", "mlym", "mong", "mymr", "orya", "tamldec", "telu", "thai", "tibt".
ca
Calendar. Possible values include: "buddhist", "chinese", "coptic", "ethioaa", "ethiopic", "gregory", "hebrew", "indian", "islamic", "islamicc", "iso8601", "japanese", "persian", "roc".
Опции
Необязательный. Объект с некоторыми или всеми из следующих свойств:
localeMatcher
Алгоритм сопоставления локали для использования. Возможные значения: "lookup"
и "best fit"
; по умолчанию "best fit"
. Информацию об этой опции смотрите на странице Intl.
часовой пояс
Часовой пояс для использования. Единственные значения, которые должны распознавать реализации, это "UTC"
; по умолчанию используется часовой пояс по умолчанию. Реализации могут также распознавать имена часовых поясов в базе данных часовых поясов IANA, такие как "Asia/Shanghai"
, "Asia/Kolkata"
, "America/New_York"
.
hour12
Использовать ли 12-часовое время (в отличие от 24-часового). Возможные значения - true
и false
; значение по умолчанию зависит от локали.
formatMatcher
Алгоритм соответствия формата для использования. Возможные значения являются "basic"
и "best fit"
; по умолчанию "best fit"
. См. Следующие параграфы для получения информации об использовании этого свойства.
Следующие свойства описывают компоненты даты и времени для использования в форматированном выводе и их требуемые представления. Реализации должны поддерживать как минимум следующие подмножества:
weekday, year, month, day, hour, minute, second
weekday, year, month, day
year, month, day
year, month
month, day
hour, minute, second
hour, minute
Реализации могут поддерживать другие подмножества, и запросы будут согласовываться со всеми доступными комбинациями подмножеств-представлений, чтобы найти наилучшее совпадение. Для этого согласования доступны два алгоритма, которые выбираются свойством formatMatcher: полностью определенный "basic"
алгоритм и зависящий от реализации алгоритм "наилучшего соответствия".
будний день
Представление дня недели. Возможные значения: "narrow"
, "short"
, "long"
.
эпоха
Представление эпохи. Возможные значения: "narrow"
, "short"
, "long"
.
год
Представление года. Возможные значения: "numeric"
, "2-digit"
.
месяц
Представление месяца. Возможные значения: "numeric"
, "2-digit"
, "narrow"
, "short"
, "long"
.
день
Представление дня. Возможные значения: "numeric"
, "2-digit"
.
час
Представление часа. Возможные значения: "numeric"
, "2-digit"
.
минут
Представление о минуте. Возможные значения: "numeric"
, "2-digit"
.
второй
Представление второе. Возможные значения: "numeric"
, "2-digit"
.
TimeZoneName
Представление названия часового пояса. Возможные значения: "short"
, "long"
. Значение по умолчанию для каждого свойства компонента даты и времени не определено, но если все свойства компонента не определены, то год, месяц и день считаются "numeric"
.
Хорошо, у нас есть нечто, называемое Intl, которое очень полезно для форматирования даты в JavaScript в наши дни:
Ваша дата как ниже:
var date = '10/8/2010';
И вы меняете на Date, используя new Date(), как показано ниже:
date = new Date(date);
И теперь вы можете отформатировать его так, как вам нравится, используя список локалей, как показано ниже:
date = new Intl.DateTimeFormat('en-AU').format(date); // Australian date format: "8/10/2010"
date = new Intl.DateTimeFormat('en-US').format(date); // USA date format: "10/8/2010"
date = new Intl.DateTimeFormat('ar-EG').format(date); // Arabic date format: "٨/١٠/٢٠١٠"
Если вы точно хотите формат, который вы упомянули выше, вы можете сделать:
date = new Date(Date.UTC(2010, 7, 10, 0, 0, 0));
var options = {year: "numeric", month: "short", day: "numeric"};
date = new Intl.DateTimeFormat("en-AU", options).format(date).replace(/\s/g, '-');
И результат будет:
"10-Aug-2010"
Для получения более подробной информации об Интернационализации API ECMAScript (Intl), посетите здесь.
var today = new Date();
var formattedToday = today.toLocaleDateString() + ' ' + today.toLocaleTimeString();
Любой, кто ищет действительно простое решение ES6 для копирования, вставки и использования:
const dateToString = d => '${d.getFullYear()}-${('00' + (d.getMonth() + 1)).slice(-2)}-${('00' + d.getDate()).slice(-2)}'
// how to use:
const myDate = new Date(Date.parse('04 Dec 1995 00:12:00 GMT'))
console.log(dateToString(myDate)) // 1995-12-04
Привет, проверьте, помогает ли эта проблема.
var d = new Date();
var options = {
day: 'numeric',
month: 'long',
year: 'numeric'
};
console.log(d.toLocaleDateString('en-ZA', options));
d.toLocaleDateString('en-US', options);
если вы в США.
Sugar.js имеет отличные расширения для объекта Date, включая метод Date.format.
Примеры из документации:
Date.create().format('{Weekday} {Month} {dd}, {yyyy}');
Date.create().format('{12hr}:{mm}{tt}')
Попробуйте следующее:
function init(){
var d = new Date();
var day = d.getDate();
var x = d.toDateString().substr(4, 3);
var year = d.getFullYear();
document.querySelector("#mydate").innerHTML = day + '-' + x + '-' + year;
}
window.onload = init;
<div id="mydate"></div>
DateFormatter.formatDate(new Date(2010,7,10), 'DD-MMM-YYYY')
= > 10-Aug-2010
DateFormatter.formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss')
= > 2017-11-22 19:52:37
DateFormatter.formatDate(new Date(2005, 1, 2, 3, 4, 5), 'D DD DDD DDDD, M MM MMM MMMM, YY YYYY, h hh H HH, m mm, s ss, a A')
= > 2 02 Wed Wednesday, 2 02 Feb February, 05 2005, 3 03 3 03, 4 04, 5 05, am AM
var DateFormatter = {
monthNames: [
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
],
dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
formatDate: function (date, format) {
var self = this;
format = self.getProperDigits(format, /d+/gi, date.getDate());
format = self.getProperDigits(format, /M+/g, date.getMonth() + 1);
format = format.replace(/y+/gi, function (y) {
var len = y.length;
var year = date.getFullYear();
if (len == 2)
return (year + "").slice(-2);
else if (len == 4)
return year;
return y;
})
format = self.getProperDigits(format, /H+/g, date.getHours());
format = self.getProperDigits(format, /h+/g, self.getHours12(date.getHours()));
format = self.getProperDigits(format, /m+/g, date.getMinutes());
format = self.getProperDigits(format, /s+/gi, date.getSeconds());
format = format.replace(/a/ig, function (a) {
var amPm = self.getAmPm(date.getHours())
if (a === 'A')
return amPm.toUpperCase();
return amPm;
})
format = self.getFullOr3Letters(format, /d+/gi, self.dayNames, date.getDay())
format = self.getFullOr3Letters(format, /M+/g, self.monthNames, date.getMonth())
return format;
},
getProperDigits: function (format, regex, value) {
return format.replace(regex, function (m) {
var length = m.length;
if (length == 1)
return value;
else if (length == 2)
return ('0' + value).slice(-2);
return m;
})
},
getHours12: function (hours) {
// https://stackoverflow.com/questions/10556879/changing-the-1-24-hour-to-1-12-hour-for-the-gethours-method
return (hours + 24) % 12 || 12;
},
getAmPm: function (hours) {
// https://stackoverflow.com/questions/8888491/how-do-you-display-javascript-datetime-in-12-hour-am-pm-format
return hours >= 12 ? 'pm' : 'am';
},
getFullOr3Letters: function (format, regex, nameArray, value) {
return format.replace(regex, function (s) {
var len = s.length;
if (len == 3)
return nameArray[value].substr(0, 3);
else if (len == 4)
return nameArray[value];
return s;
})
}
}
console.log(DateFormatter.formatDate(new Date(), 'YYYY-MM-DD HH:mm:ss'));
console.log(DateFormatter.formatDate(new Date(), 'D DD DDD DDDD, M MM MMM MMMM, YY YYYY, h hh H HH, m mm, s ss, a A'));
console.log(DateFormatter.formatDate(new Date(2005, 1, 2, 3, 4, 5), 'D DD DDD DDDD, M MM MMM MMMM, YY YYYY, h hh H HH, m mm, s ss, a A'));
В описании формата принималось Ionic Framework (не поддерживает Z
, UTC Timezone Offset)
Не проверено полностью
Вдохновленный JD Smith чудесным решением для регулярных выражений, у меня внезапно возникла идея раскалывания головы:
var D = Date().toString().split(" ");
document.getElementById("demo").innerHTML = D[2] + "-" + D[1] + "-" + D[3];
Если вам нужна короткая, удобная для человека функция, это легко настраивается для вас.
Параметр timeStamp - миллисекунды с 1970 года - он возвращается new Date().getTime()
и многими другими устройствами...
Хорошо, я передумал. Я включил дополнительную функцию для нулевого заполнения. Проклятия!
function zeroPad(aNumber) {
return ("0"+aNumber).slice(-2);
}
function humanTime(timeStamp) {
var M = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
var D = new Date(timeStamp); // 23 Aug 2016 16:45:59 <-- Desired format.
return D.getDate() + " " + M[D.getMonth()] + " " + D.getFullYear() + " " + D.getHours() + ":" + zeroPad(d.getMinutes()) + ":" + zeroPad(D.getSeconds());
}
Существует новая библиотека smarti.to.js, для локализованного форматирования номеров JavaScript, дат и дат JSON (Microsoft или ISO8601).
Пример:
new Date('2015-1-1').to('dd.MM.yy') // Outputs 01.01.2015
"2015-01-01T10:11:12.123Z".to('dd.MM.yy') // Outputs 01.01.2015
В файле локализации также есть пользовательские короткие шаблоны (smarti.to. {culture}.js). Пример (smarti.to.et-EE.js):
new Date('2015-1-1').to('d') // Outputs 1.01.2015
И способность мультиформатирования:
smarti.format('{0:n2} + {1:n2} = {2:n2}', 1, 2, 3) // Output: 1,00 + 2,00 = 3,00
Вот script, который делает именно то, что вы хотите
https://github.com/UziTech/js-date-format
var d = new Date("2010-8-10");
document.write(d.format("DD-MMM-YYYY"));
Добавьте плагин jQuery UI на свою страницу:
function DateFormate(dateFormate, datetime) {
return $.datepicker.formatDate(dateFormate, datetime);
};
Другой способ, по которому вы можете форматировать дату
function formatDate(dDate,sMode){
var today = dDate;
var dd = today.getDate();
var mm = today.getMonth()+1; //January is 0!
var yyyy = today.getFullYear();
if(dd<10) {
dd = '0'+dd
}
if(mm<10) {
mm = '0'+mm
}
if (sMode+""==""){
sMode = "dd/mm/yyyy";
}
if (sMode == "yyyy-mm-dd"){
return yyyy + "-" + mm + "-" + dd + "";
}
if (sMode == "dd/mm/yyyy"){
return dd + "/" + mm + "/" + yyyy;
}
}
Я размещаю здесь для будущей справки и готовой к копированию-вставки, это основной ответ, измененный, чтобы иметь 3-месячные месяцы и 2-значный год:
function formatDate(date) {
var monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var day = date.getDate(), monthIndex = date.getMonth(), year = date.getFullYear().toString().substr(-2);
return day + ' ' + monthNames[monthIndex] + ' ' + year;
}
document.write(formatDate(new Date()));
Я использую следующее. Это просто и прекрасно работает.
var dtFormat = require('dtformat');
var today = new Date();
dtFormat(today, "dddd, mmmm dS, yyyy, h:MM:ss TT");
Или это:
var now = new Date()
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
var formattedDate = now.getDate() + "-" + months[now.getMonth()] + "-" + now.getFullYear()
alert(formattedDate)
Если вы уже используете ExtJS в своем проекте, вы можете использовать Ext.Date:
var date = new Date();
Ext.Date.format(date, "d-M-Y");
возвращает:
"11-Nov-2015"
Я знаю, что кто-то может сказать, что это глупое решение, но оно делает трюк, чтобы удалить ненужную информацию с даты.
yourDateObject
производит:
Ср Дек 13 2017 20:40:40 GMT + 0200 (EET)
yourDateObject.toString().slice(0, 15);
производит:
Ср 13 дек 2017
Следующий код позволит вам отформатировать дату до DD-MM-YYYY
(27-12-2017) или DD MMM YYYY
(27 декабря 2017 года):
/** Pad number to fit into nearest power of 10 */
function padNumber(number, prependChar, count) {
var out = '' + number; var i;
if (number < Math.pow(10, count))
while (out.length < ('' + Math.pow(10, count)).length) out = prependChar + out;
return out;
}
/* Format the date to 'DD-MM-YYYY' or 'DD MMM YYYY' */
function dateToDMY(date, useNumbersOnly) {
var months = [
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct',
'Nov', 'Dec'
];
return '' + padNumber(date.getDate(), '0', 1) +
(useNumbersOnly? '-' + padNumber(date.getMonth() + 1, '0', 1) + '-' : ' ' + months[date.getMonth()] + ' ')
+ date.getFullYear();
}
Измените порядок date.getFullYear()
и padNumber(date.getDate(), '0', 1)
, чтобы сделать функцию dateToYMD()
.
Подробнее см. repl.it example.
2,39 КБ. Один файл. https://github.com/rhroyston/clock-js
10 августа 2010 года будет:
var str = clock.month
str.charAt(0).toUpperCase() + str.slice(1,3); //gets you "Aug"
console.log(clock.day + '-' + str + '-' + clock.year); //gets you 10-Aug-2010
str.charAt(0).toUpperCase() + str.slice(1,3);
Отчасти побеждает цель использования библиотеки. Почему бы вам не добавить стандартную поддержку трехбуквенных форматов? Кроме того, вы можете рассмотреть возможность добавления интернационализации в вашу библиотеку, поскольку подобная библиотека была бы бесполезна для неанглоязычных веб-сайтов без нее!
Короткий, широко совместимый подход:
function formatDate(date) {
date.toISOString()
.replace(/^(\d+)-(\d+)-(\d+).*$/, // Only extract Y-M-D
function (a,y,m,d) {
return [
d, // Day
['Jan','Feb','Mar','Apr','May','Jun', // Month Names
'Jul','Ago','Sep','Oct','Nov','Dec']
[m-1], // Month
y // Year
].join('-') // Stitch together
})
}
Или, как одна строка:
date.toISOString().replace(/^(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+).(\d+)Z$/, function (a,y,m,d) {return [d,['Jan','Feb','Mar','Apr','May','Jun','Jul','Ago','Sep','Oct','Nov','Dic'][m-1],y].join('-')})
Чтобы получить "10 августа 2010", попробуйте:
var date = new Date('2010-08-10 00:00:00');
date = date.toLocaleDateString(undefined, {day:'2-digit'}) + '-' + date.toLocaleDateString(undefined, {month:'short'}) + '-' + date.toLocaleDateString(undefined, {year:'numeric'})
Для поддержки браузера см. ToLocaleDateString.
Простая функция, которая может возвращать дату, дату + время или просто время:
var myDate = dateFormatter( "2019-01-24 11:33:24", "date-time" );
// >> RETURNS "January 24, 2019 11:33:24"
var myDate2 = dateFormatter( "2019-01-24 11:33:24", "date" );
// >> RETURNS "January 24, 2019"
var myDate3 = dateFormatter( "2019-01-24 11:33:24", "time" );
// >> RETURNS "11:33:24"
function dateFormatter( strDate, format ){
var theDate = new Date(strDate);
if( format=="time" )
return getTimeFromDate(theDate);
else{
var dateOptions = {year:'numeric', month:'long', day:'numeric'};
var formattedDate = theDate.toLocaleDateString("en-US", + dateOptions);
if( format=="date" )
return formattedDate;
return formattedDate + " " + getTimeFromDate(theDate);
}
}
function getTimeFromDate( theDate ){
var sec = theDate.getSeconds();
if( sec<10 )
sec = "0"+sec;
var min = theDate.getMinutes();
if( min<10 )
min = "0"+min;
return theDate.getHours() + ':'+ min + ':' + sec;
}
Вам не нужны никакие библиотеки, просто извлеките компоненты даты и создайте строку. Вот как можно получить формат YYYY-MM-DD
, также обратите внимание на индекс месяца "январь равен 0, февраль равен 1 и т.д.".
// @flow
type Components = {
day: number,
month: number,
year: number
}
export default class DateFormatter {
// YYYY-MM-DD
static YYYY_MM_DD = (date: Date): string => {
const components = DateFormatter.format(DateFormatter.components(date))
return '${components.year}-${components.month}-${components.day}'
}
static format = (components: Components) => {
return {
day: '${components.day}'.padStart(2, '0'),
month: '${components.month}'.padStart(2, '0'),
year: components.year
}
}
static components = (date: Date) => {
return {
day: date.getDate(),
month: date.getMonth() + 1,
year: date.getFullYear()
}
}
}
Использование:
thisDate = new Date(parseInt(jsonDateString.replace('/Date(', '')));
formattedDate = (thisDate.getMonth() + 1) + "/" + (thisDate.getDate()+1) + "/" + thisDate.getFullYear();
Это принимает JSON date, "/Date (1429573751663)/" и производит как форматированную строку:
"4/21/2015"
Эта библиотека может форматировать объект даты и анализировать форматированную строку обратно на объект Date. Он использует формат Java (класс SimpleDateFormat). Название месяцев и дней может быть локализовано.
http://www.javascriptsource.com/repository/javascripts/2009/03/880961/JS_Simple_Date_Format.zip
Пример:
var sdf = new JsSimpleDateFormat("dd-MMM-yyyy");
var formattedString = sdf.format(new Date());
var dateObject = sdf.parse("10-Aug-2010");
Ниже преобразуется строка JsonDate в дату
function dateParser(jsonDate) {
if (jsonDate != null) {
var date = new Date(parseInt(jsonDate.substr(6)));
var datestring = date.toLocaleFormat('%d-%b-%Y');
return datestring.replace(/-/g, " ");
}
else { return ''; }
}
function DateAdd(x) {
var myDate = new Date(x);
myDate.setDate(myDate.getDate() + 9);
//var sDate = new Date(Date.parse(myDate, "MM/dd/yyyy"));
today = new Date(myDate);
var dateString = today.format("MM/dd/yyyy");
alert(dateString);
// alert(sDate.toString('dddd, MMMM ,yyyy'));
// var confirmed = window.confirm("change a record, would you like to continue ?");
return false;
}
format()
не является методом объектов Date
и приведенный выше код не будет работать, если вы не добавили некоторую реализацию format()
в Date.prototype
. Без предложения такой реализации этот ответ бесполезен.
myDate.getDay()
не возвращает день недели, аmyDate.getDay()
местоположение дня недели, связанного с неделей.myDate.getDate()
возвращает текущий день недели .