如何格式化javascript日期

eit6fx6z  于 2021-06-23  发布在  Mysql
关注(0)|答案(15)|浏览(360)

在javascript中,如何格式化要打印的日期对象 10-Aug-2010 ?

xv8emn3q

xv8emn3q1#

我想你可以用非标准日期法 toLocaleFormat(formatString) formatstring:与用户所期望的格式相同的格式字符串 strftime() 函数在c。

var today = new Date();
today.toLocaleFormat('%d-%b-%Y'); // 30-Dec-2011

参考文献:
甲苯甲醛
strftime公司

i34xakig

i34xakig2#

好的,我们有一个叫做intl的东西,它在现在用javascript格式化日期时非常有用:
您的日期如下:

var date = '10/8/2010';

使用new date()更改为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"

有关更多信息,请参阅intl api和intl.datetimeformat文档。

lqfhib0f

lqfhib0f3#

@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

2w3kk1z5

2w3kk1z54#

如果对格式的控制比当前接受的答案稍微少一些, Date#toLocaleDateString 可用于创建特定于区域设置的标准渲染。这个 locale 以及 options 参数允许应用程序指定应使用其格式约定的语言,并允许对呈现进行一些自定义。

选项主要示例:

日期:
当天的表现。
可能的值为“数字”、“两位数”。
工作日:
工作日的表示。
可能的值为“窄”、“短”、“长”。
年份:
年度代表。
可能的值为“数字”、“两位数”。
月份:
月份的表示。
可能的值有“数字”、“两位数”、“窄”、“短”、“长”。
时间:
小时的表示法。
可能的值为“数字”、“两位数”。
分钟:分钟的表示形式。
可能的值为“数字”、“两位数”。
第二:
第二个的代表。
可能的值为“数字”,2位数。
所有这些钥匙都是可选的。您可以根据需求更改选项值的数量,这也将反映每个日期时间项的存在。
注意:如果您只想配置内容选项,但仍然使用当前区域设置,请传递 null 因为第一个参数将导致错误。使用 undefined 相反。

对于不同的语言:

“en-us”:指英语
“hi in”:印地语
“ja-jp”:日语
你可以使用更多的语言选项。

例如

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

camsedfj

camsedfj5#

如果您已经在项目中使用jquery ui,可以这样做:

var formatted = $.datepicker.formatDate("M d, yy", new Date("2014-07-08T09:02:21.377"));

// formatted will be 'Jul 8, 2014'

这里提供了一些datepicker日期格式选项。

pkwftd7m

pkwftd7m6#

自定义格式函数:

对于固定格式,一个简单的函数就可以完成这项工作。以下示例生成国际格式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格式化函数:

由于ecmascript的较新版本 Date 类有一些特定的格式化函数:
todatestring:依赖于实现,仅显示日期。
http://www.ecma-international.org/ecma-262/index.html#sec-date.prototype.todatestring

new Date().toDateString(); // e.g. "Fri Nov 11 2016"

toisostring:显示iso8601日期和时间。
http://www.ecma-international.org/ecma-262/index.html#sec-日期.prototype.toisostring

new Date().toISOString(); // e.g. "2016-11-21T08:00:00.000Z"

tojson:json的字符串化器。
http://www.ecma-international.org/ecma-262/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/index.html#sec-date.prototype.tolocaledatestring

new Date().toLocaleDateString(); // e.g. "21/11/2016"

tolocalstring:依赖于实现,一个区域设置格式的日期和时间。
http://www.ecma-international.org/ecma-262/index.html#sec-date.prototype.toLocalString

new Date().toLocaleString(); // e.g. "21/11/2016, 08:00:00 AM"

tolocaletimestring:依赖于实现,是区域设置格式的时间。
http://www.ecma-international.org/ecma-262/index.html#sec-date.prototype.tolocaletimestring

new Date().toLocaleTimeString(); // e.g. "08:00:00 AM"

tostring:date的通用tostring。
http://www.ecma-international.org/ecma-262/index.html#sec-日期.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));

指定标准函数的区域设置:

上面列出的一些标准函数取决于语言环境: toLocaleDateString() toLocaleTimeString() toLocalString() 这是因为不同的文化使用不同的格式,并以不同的方式表达他们的日期或时间。默认情况下,函数将返回在其运行的设备上配置的格式,但这可以通过设置参数(ecma-402)来指定。

toLocaleDateString([locales[, options]])
toLocaleTimeString([locales[, options]])
toLocaleString([locales[, options]])
//e.g. toLocaleDateString('ko-KR');

这个 option 第二个参数,允许在所选区域设置内配置更具体的格式。例如,月份可以显示为全文或节略。

toLocaleString('en-UK', { month: 'short' })
toLocaleString('en-UK', { month: 'long' })

示例代码段:

console.log("1) "+  new Date().toLocaleString('en-US'));
console.log("2) "+  new Date().toLocaleString('ko-KR'));
console.log("3) "+  new Date().toLocaleString('de-CH'));

console.log("4) "+  new Date().toLocaleString('en-UK', { hour12: false }));
console.log("5) "+  new Date().toLocaleString('en-UK', { hour12: true }));

有关区域设置的一些良好做法:
大多数人不喜欢他们的日期以外国人的格式出现,因此,尽可能保留默认的区域设置(在任何地方都设置“en-us”)。
实现从utc到utc的转换可能具有挑战性(考虑到dst、时区不是1小时的倍数等)。尽可能使用经过良好测试的库。
不要假设语言环境与一个国家相关:几个国家有很多语言环境(加拿大、印度等)
避免通过非标准方式检测区域设置。在这里,您可以了解多个陷阱:检测键盘布局、按地理位置检测区域设置等。。

7eumitmz

7eumitmz7#

使用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

npm上的日期格式
http://jsfiddle.net/phzr7/1/

rbpvctlc

rbpvctlc8#

你应该看看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/

lvmkulzt

lvmkulzt9#

好吧,我想要的是将今天的日期转换成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);
}

这将为您提供正确的日期,以防您在一天的开始/结束时执行此代码。
例子:http://jsfiddle.net/simo/sapuhzmm/
日期.toisostring
日期.tojson
字符串.切片

c9x0cxw0

c9x0cxw010#

如果需要使用纯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
relj7zay

relj7zay11#

在现代浏览器(*)中,您只需执行以下操作:

var today = new Date().toLocaleDateString('en-GB', {
    day : 'numeric',
    month : 'short',
    year : 'numeric'
}).split(' ').join('-');

如果今天(1月24日)执行输出ᵗʰ, 2016):

'24-Jan-2016'

(*)根据mdn,“现代浏览器”是指chrome 24+、firefox 29+、互联网 探险家 11,边缘 12岁以上,歌剧院 15+和safari夜间建造。

yiytaume

yiytaume12#

对于自定义分隔日期格式,必须从 DateTimeFormat 对象(这是ecmascript国际化api的一部分),然后手动创建一个包含所需分隔符的字符串。
为此,您可以使用 DateTimeFormat#formatToParts . 您可以分解数组,但这并不理想,因为数组输出取决于区域设置:

// example 1
const o_date_en = new Intl.DateTimeFormat('en');
const a_date_en = o_date_en.formatToParts();
// example 2
const o_date_hi = new Intl.DateTimeFormat('hi');
const a_date_hi = o_date_hi.formatToParts();
// print
console.log(a_date_en, a_date_hi);

最好将数组缩小为一个对象:

const o_date = new Intl.DateTimeFormat;
const f_date = (m_ca, m_it) => Object({...m_ca, [m_it.type]: m_it.value});
const m_date = o_date.formatToParts().reduce(f_date, {});
console.log(m_date.day + '-' + m_date.month + '-' + m_date.year);

你也可以把 DateTimeFormat 逐一使用 DateTimeFormat#format ,但请注意,在使用此方法时,从2020年3月起,ecmascript实现中存在一个错误,即在分钟和秒上出现前导零(通过上述方法可以避免此错误)。

const d = new Date(2010, 7, 5);
const ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(d);
const mo = new Intl.DateTimeFormat('en', { month: 'short' }).format(d);
const da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(d);
console.log(`${da}-${mo}-${ye}`);

在处理日期和时间时,通常值得使用一个库(例如moment.js、luxon),因为该字段有许多隐藏的复杂性。
请注意,ie10不支持上述解决方案中使用的ecmascript国际化api(2020年2月全球浏览器市场份额为0.03%)。

tyg4sfes

tyg4sfes13#

一行请求的格式-没有库和日期方法,只有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()')

在我的测试中,这在主要浏览器(chrome、safari、firefox和ie)中都能可靠地工作,正如@robg所指出的,date.prototype.tostring()的输出依赖于实现,因此对于国际或非浏览器实现,只需测试输出,以确保它在javascript引擎中正常工作。您甚至可以添加一些代码来测试字符串输出,并在执行regex替换之前确保它与您期望的匹配。

jvlzgdj9

jvlzgdj914#

打包的solution:luxon
如果您想使用一个解决方案来适应所有人,我强烈建议您使用luxon(moment.js的一个现代化版本),它还可以在许多地区/语言中进行格式化,并提供大量其他功能。
luxon托管在moment.js网站上,由moment.js开发人员开发,因为moment.js有开发人员想要解决但无法解决的限制。
要安装: npm install luxon 或者 yarn add luxon (其他请访问链接)

zqdjd7g9

zqdjd7g915#

纯javascript是小型onetimer的最佳选择。
另一方面,如果你需要更多的约会内容,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

相关问题