Вы можете использовать partial
для выполнения этого:
>>> from collections import defaultdict
>>> from functools import partial
>>> pickle.loads(pickle.dumps(defaultdict(partial(defaultdict, int))))
defaultdict(<functools.partial object at 0x94dd16c>, {})
Внимание: Ниже приведены более качественные ответы. Этот ответ был написан в 2010 году, и с тех пор появились новые и лучшие решения.
blockquote>
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 , и т.д ..
Для фиксированных форматов простую функцию выполняет задание. В следующем примере создается международный формат YYYY-MM-DD:
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 (например, путем добавления этой функции к прототипу Date).
Более продвинутая функция может генерировать настраиваемый вывод на основе параметра формата.
Если для записи функции форматирования слишком много времени, существует множество библиотек, вокруг которых это делается. Некоторые другие ответы уже перечисляют их. Но увеличение зависимостей также имеет противоположную роль.
Поскольку в более поздних версиях 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));
Вот как я применил мои плагины 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;
}
'M'
на format = format.replace("M(?!M)", (dt.getMonth()+1).toString());
и поставьте ее над строкой с помощью 'MMMM'
– ntaso
22 February 2017 в 10:46
Если вы используете jQuery UI в своем коде, есть встроенная функция, называемая formatDate()
. Я использую его таким образом, чтобы форматировать сегодняшнюю дату:
var testdate = Date();
testdate = $.datepicker.formatDate( "d-M-yy",new Date(testdate));
alert(testdate);
Вы можете увидеть множество других примеров даты форматирования в документации jQuery UI .
Вдохновленный чудесным решением регулярного выражения JD Smith , у меня внезапно возникла идея раскалывания головы:
var D = Date().toString().split(" ");
document.getElementById("demo").innerHTML = D[2] + "-" + D[1] + "-" + D[3];
Привет, если это помогает с вашей проблемой.
var d = new Date();
var options = {
day: 'numeric',
month: 'long',
year: 'numeric'
};
console.log(d.toLocaleDateString('en-ZA', options));
d.toLocaleDateString('en-US', options);
, если вы находитесь в США.
– BishopZ
27 January 2018 в 07:31
Если вы уже используете jQuery UI в своем проекте, вы можете сделать это следующим образом:
var formatted = $.datepicker.formatDate("M d, yy", new Date("2014-07-08T09:02:21.377"));
// formatted will be 'Jul 8, 2014'
Доступны некоторые параметры формата даты датпикера для игры здесь .
Полезным и гибким способом форматирования 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"
Форматы даты и времени могут быть настроены используя аргумент options.
Объект Intl.DateTimeFormat
- это конструктор для объектов, которые позволяют форматирование даты и времени с учетом языка.
Синтаксис
new Intl.DateTimeFormat([locales[, options]])
Intl.DateTimeFormat.call(this[, locales[, options]])
Параметры
locales
Необязательно. Строка с тегом языка 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.
timeZone
Часовой пояс для использования. Единственные значения, которые должны быть реализованы, - "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"
и алгоритм «наилучшего соответствия», зависящий от реализации.
weekday
Представление будний день. Возможные значения: "narrow"
, "short"
, "long"
.
era
Представление эпохи. Возможные значения: "narrow"
, "short"
, "long"
.
year
Представление года. Возможные значения: "numeric"
, "2-digit"
.
month
Представление месяца. Возможные значения: "numeric"
, "2-digit"
, "narrow"
, "short"
, "long"
.
день
Представление дня. Возможные значения: "numeric"
, "2-digit"
.
hour
Представление часа. Возможные значения: "numeric"
, "2-digit"
.
минута
Представление минуты. Возможные значения: "numeric"
, "2-digit"
.
second
Представление второго. Возможные значения: "numeric"
, "2-digit"
.
timeZoneName
Представление имени часового пояса. Возможные значения: "short"
, "long"
. Значение по умолчанию для каждого свойства компонента даты и времени не определено, но если все свойства компонента не определены, то предполагается, что год, месяц и день "numeric"
.
Я могу получить ваш запрошенный формат в одной строке без использования библиотек и методов 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()')
Update: Как указывал @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'));
– John
30 April 2016 в 11:44
var today = new Date();
var formattedToday = today.toLocaleDateString() + ' ' + today.toLocaleTimeString();
Вот какой код я только что написал для обработки форматирования даты для проекта, над которым я работаю. Он имитирует функциональность форматирования даты 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
*
************************************/
В современных браузерах (*) вы можете просто сделать это:
var today = new Date().toLocaleDateString('en-GB', {
day : 'numeric',
month : 'short',
year : 'numeric'
}).split(' ').join('-');
Выход, если выполняется сегодня (январь 24ᵗʰ, 2016):
'24-Jan-2016'
(*) Согласно MDN , «современные браузеры» означают Chrome & nbsp; 24+, Firefox 29+, Internet & nbsp; Explorer & nbsp; 11, Edge & nbsp; 12+, Opera & nbsp; 15+ & amp; Safari ночной сборки .
Если вам нужно быстро форматировать дату, используя обычный 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
Добавьте плагин jQuery UI к вашей странице:
function DateFormate(dateFormate, datetime) {
return $.datepicker.formatDate(dateFormate, datetime);
};
new Date(date + " UTC")
, чтобы обмануть часовой пояс, и вы можете исключить строку setMinutes. Мужчина, javascript грязный
– Vajk Hermecz
22 October 2015 в 22:01
var today = new Date().toISOString().slice(0,-14)
:)
– Alex Shaffer
25 February 2016 в 14:27
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)
toLocaleDateString();
Метод toLocaleDateString()
возвращает строку с чувствительным к языку представлением части даты даты. Локалы и аргументы параметров позволяют приложениям указывать язык, в котором должны использоваться правила форматирования, и позволять настраивать поведение функции.
Все эти клавиши являются необязательными. Вы можете изменить количество значений параметров в соответствии с вашими требованиями, и это также будет отражать наличие каждый день.
Примечание. Если вы хотите настроить параметры контента, но по-прежнему использовать текущий язык, передача 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
moment.js
для простого формата. К счастью, сделал дополнительный поиск в Google и нашел, что уже есть собственный API. Сохранена внешняя зависимость. Потрясающие!
– Leon li
29 September 2017 в 03:19
Я думаю, вы можете просто использовать нестандартный метод Date toLocaleFormat(formatString)
formatString: строка формата в том же формате, который ожидается функцией strftime()
в C
var today = new Date();
today.toLocaleFormat('%d-%b-%Y'); // 30-Dec-2011
Ссылки:
Используйте библиотеку date.format :
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
Вот сценарий, который делает именно то, что вы хотите
https://github.com/UziTech/js-date-format
var d = new Date("2010-8-10");
document.write(d.format("DD-MMM-YYYY"));
@ 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/ Дата / toLocaleDateString
new Date().toLocaleDateString("en-EN", {month: "short", weekday: "short", day: "2-digit", year: "numeric"})
возвращает "Wed, Sep 06, 2017"
– Pedi T.
6 September 2017 в 14:03
Использование шаблона строки 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);
Существует новая библиотека 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
new Date(date + " UTC")
, чтобы обмануть часовой пояс, и вы можете исключить строку setMinutes. Мужчина, javascript грязный
– Vajk Hermecz
22 October 2015 в 22:01
var today = new Date().toISOString().slice(0,-14)
:)
– Alex Shaffer
25 February 2016 в 14:27
Date
для этого? – Nayan 24 July 2014 в 16:04