JS日期:在每个单独的日期或月份前面添加0

11

我从API中解析出的日期是一个字符串: DD-MM-YYYY,但有时日期格式可能是DD-M-YYYY,甚至是D-M-YYYY。

例如:

4-1-201310-10-20137-4-2013

年份始终为四位数,但天数或月份数字有时只有一位。 如何使用JS手动在每个数字前面添加0?

我正在使用moment.js进行一些计算,因此我要使用它来去除“ - ”。

date.replace("-", "")

我需要一个整数(例如4-1-2013 = 412013),以便我可以在 moment.js 中使用它,但如果它是一个单个数字,一切都会混乱。


1
你能详细说明一下它是如何被“搞砸”的吗?Moment.js API支持这些格式。如果你输入:moment('4-1-2013', 'D-M-YYYY'),它会将其解释为2013年1月4日。 - founddrama
4个回答

18

你可以先像这样将字符串标准化:

date = date.replace(/\b(\d{1})\b/g, '0$1');

将会把任何单个数字的“单词”前置一个零。

请注意,要全局替换每个 -,必须使用.replace的正则表达式版本 - 你使用的字符串版本只会替换第一次出现,因此:

date = date.replace(/\b(\d{1})\b/g, '0$1').replace(/-/g, '');

我会做你需要的一切。


11

Moment.js支持带有连字符的格式,因此您甚至不需要进行任何字符串处理。

moment('4-1-2013', 'MM-DD-YYYY').format("MMDDYYYY");   // 04012013
moment('10-10-2013', 'MM-DD-YYYY').format("MMDDYYYY"); // 10102013

2

如果日期变量以字符串格式存在(例如来自input[type=date]),则需要将数据组件拆分为单个项目。

date = date.split('-');

然后检查日期和月份的长度。
day = date[0].length==1 ? "0"+date[0] : date[0];
month = date[1].length==1 ? "0"+date[1] : date[1];

然后将它们重新组合成你想要的格式。
date = ""+day+month+date[2];

工作示例:http://jsfiddle.net/dzXPE/


0
var day = new Date();
day = day.getDay();
if(day.toString().length <= 1) {
    day = '0' + day;
}

你可以使用同样的方法来处理月份。我不完全确定你是否需要将其转换为字符串,但这样做也无妨。


1
它可以工作,因为我得到的日期是字符串。你不能定义day.getDay()。想象一下7-4-2013是一个单词。 - ClydeM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接