10

我想格式化这样的日期:

May 02 2013

但目前,我的格式如下所示:

May 2 2013

我怎样才能对这种类型的日期进行零填充,以便日期中的日期类似于02而不是只是2


这是我正在使用的代码:

var m_names = new Array("January", "February", "March", 
"April", "May", "June", "July", "August", "September", 
"October", "November", "December");

var d = new Date();
var curr_date = d.getDate();
var curr_month = d.getMonth();
var curr_year = d.getFullYear();
alert( m_names[curr_month] + " " +curr_date + " " + curr_year);

jsFiddle 代码在这里

4

6 回答 6

22

你可以像这样实现这个逻辑:

var d = new Date();
var curr_date = ("0" + d.getDate()).slice(-2);
var curr_month = d.getMonth();
var curr_year = d.getFullYear();
console.log( m_names[curr_month] + " " +curr_date + " " + curr_year);

小提琴


更新- (2017 年 10 月 1 日)

EcmaScript 2017 或 ES8 引入了两个新的 String 原型方法: padStart()padEnd(). 我们可以在字符串之前或之后添加一些额外的空格或破折号(或任何其他字符)。我们可以在这里使用它,例如:

var curr_date = d.getDate().toString().padStart(2,0);

(如果我们不需要将d.getDate()转换为字符串,此语法可能会更短,因为padStart仅适用于字符串)

演示:

var m_names = new Array("January", "February", "March",
  "April", "May", "June", "July", "August", "September",
  "October", "November", "December");

var d = new Date('10/1/2017');
var curr_date = d.getDate().toString().padStart(2, 0);
var curr_month = d.getMonth();
var curr_year = d.getFullYear();
var formatted_date = m_names[curr_month] + " " + curr_date + " " + curr_year;

console.log(formatted_date);

于 2013-05-02T17:36:28.130 回答
4

是你可以做到的。看看日期是否大于 9。如果是则使用它,如果不添加前导零

var curr_date = d.getDate();
curr_date = curr_date > 9 ? curr_date : "0" + curr_date;
于 2013-05-02T17:37:33.833 回答
2

解决方案

验证是否curr_date低于 9。如果是,则添加"0" + curr_date.

所以,你可以像下面这样内联:

curr_date = (curr_date <= 9 ? "0" : "") + curr_date

或者,直接在警报中:

alert( m_names[curr_month] + " " + 
       (curr_date <= 9 ? "0" : "") + curr_date + 
       " " + curr_year);

解释

如您所见,我使用?:了 operator

在计算机编程中,?:是一种三元运算符,它是几种编程语言中基本条件表达式语法的一部分。它通常被称为条件运算符、内联 if (iif) 或三元 if。

它是如何工作的?

这很简单!看:

condition ? value_if_true : value_if_false`

或者

variable1 === variable2 ? value_if_true : value_if_false

请参阅更新的 FIDDLE

于 2013-05-02T17:37:26.087 回答
1

在当前的 Chrome 开发版 (v28.0.1496.0) 中,toPaddedString(n)每个 Number 对象都有一个函数。

Number(16).toPaddedString(4)
"0016"

不过,这是一个非常狭窄的浏览器,所以我怀疑它会对你有多大好处。它也可能是 Chrome 生产版本的一部分,但目前我面前没有那个版本。该函数不是 EcmaScript 5.1 的一部分,因此最好不要依赖它。然而,事实并非[native code]如此,所以...

Number(1).toPaddedString
function g(k,j){var i=this.toString(j||10);return"0".times(k-i.length)+i}

因此,要在任何浏览器中使用此功能,请包含以下代码行:

Number.prototype.toPaddedString = function g(k,j){var i=this.toString(j||10);return"0".times(k-i.length)+i};

然后可以填充您的月份,如下所示:

var curr_month = d.getMonth().toPaddedString(2);
于 2013-05-06T02:40:47.800 回答
0
$("#cuentapendiente").focusout(function(){
    if($(this).val()!=""){
        $(this).val(zeroFill($(this).get(0).value,6))
    }
}
于 2016-03-01T17:20:25.973 回答
-1

咖啡脚本中的这个解决方案(包装到生态文件中)对我有用

<% zero_pad = (x) -> if x < 10 then '0'+x else ''+x %>
<% d = new Date() %>
<% m = d.getFullYear() %>
<% m += "-"+zero_pad (d.getMonth()+1) %>
<% m += "-"+zero_pad d.getDate() %>
<input type="date" name="date" width="20" value="<%- m %>">
于 2014-02-19T16:25:11.900 回答