在 JavaScript 中,如何格式化要打印的日期对象10-Aug-2010
?
如何格式化 JavaScript 日期
如果您需要对格式的控制比当前接受的答案稍少,Date#toLocaleDateString
可用于创建标准的特定于语言环境的渲染。在locale
和options
论据让应用程序指定其格式约定应该使用的语言,并允许渲染的一些定制。
选项关键示例:
- day:一天
的表示。
可能的值为“数字”、“2 位数字”。 - 工作日:工作日
的表示。
可能的值为“窄”、“短”、“长”。 - 年份:年份
的表示。
可能的值为“数字”、“2 位数字”。 - 月份:月份
的表示。
可能的值为“数字”、“2 位”、“窄”、“短”、“长”。 - 小时:小时
的表示。
可能的值为“数字”、“2 位数字”。 - 分钟:分钟
的表示。
可能的值为“数字”、“2 位数字”。 - 第二个:第二个
的表示。
可能的值为“数字”,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
参考:
对于自定义分隔的日期格式,您必须从DateTimeFormat
对象(它是ECMAScript 国际化 API 的一部分
)中提取日期(或时间)组件,然后手动创建一个带有所需分隔符的字符串。
为此,您可以使用DateTimeFormat#formatToParts
. 您可以解构数组,但这并不理想,因为数组输出取决于语言环境:
{ // example 1
let f = new Intl.DateTimeFormat('en');
let a = f.formatToParts();
console.log(a);
}
{ // example 2
let f = new Intl.DateTimeFormat('hi');
let a = f.formatToParts();
console.log(a);
}
更好的是将格式数组映射到结果字符串:
function join(t, a, s) {
function format(m) {
let f = new Intl.DateTimeFormat('en', m);
return f.format(t);
}
return a.map(format).join(s);
}
let a = [{day: 'numeric'}, {month: 'short'}, {year: 'numeric'}];
let s = join(new Date, a, '-');
console.log(s);
您还可以使用DateTimeFormat
逐一
拉出部分DateTimeFormat#format
,但请注意,使用此方法时,截至 2020 年 3 月,ECMAScript 实现中存在一个错误,涉及分钟和秒的前导零(此错误被上述方法规避)。
let d = new Date(2010, 7, 5);
let ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(d);
let mo = new Intl.DateTimeFormat('en', { month: 'short' }).format(d);
let 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%)。
如果你需要使用普通的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
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
好吧,我想要的是将今天的日期转换为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);
}
如果您在一天的开始/结束前后执行此代码,这将为您提供正确的日期。
var date = new Date();
function toLocal(date) {
var local = new Date(date);
local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
return local.toJSON();
}
function toJSONLocal(date) {
var local = new Date(date);
local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
return local.toJSON().slice(0, 10);
}
// check out your devtools console
console.log(date.toJSON());
console.log(date.toISOString());
console.log(toLocal(date));
console.log(toJSONLocal(date));