11

我将此日期从 api 解析为字符串:DD-MM-YYYY 但有时日期是 DD-M-YYYY 甚至 DM-YYYY。

例如:

2013年 4 月 1 日 或 2013年 10 月 10 日 或2013 年 7 月 4 日

年份总是 4 位数字,但天或月有时会变成一位数。如何手动(使用 JS)在每个数字前添加 0 ?

我正在使用 moment.js 进行一些计算,因此我删除了“-”使用

date.replace("-", "")

得到一个整数(例如 4-1-2013 = 412013),所以我可以将它与 moment.js 一起使用,但如果它是一个数字,一切都会搞砸。

4

4 回答 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, '');

会做你需要的一切。

于 2013-02-04T11:45:27.837 回答
11

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

moment('4-1-2013', 'MM-DD-YYYY').format("MMDDYYYY");   // 04012013
moment('10-10-2013', 'MM-DD-YYYY').format("MMDDYYYY"); // 10102013
于 2013-02-04T17:16:14.083 回答
2

如果日期变量是字符串格式(例如 from 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/

于 2013-02-04T11:45:16.587 回答
0
var day = new Date();
day = day.getDay();
if(day.toString().length <= 1) {
    day = '0' + day;
}

您可以使用相同的月份。我不完全确定您需要转换为字符串,但它不会受到伤害。

于 2013-02-04T11:41:05.657 回答