javascript 将返回的字符串(YYYYMMDD)转换为日期

b4lqfgs4  于 2022-12-17  发布在  Java
关注(0)|答案(4)|浏览(156)

我有一个字符串,其中包含8位数字,代表一个日期。例如:

20120515

我想将它与今天的日期进行比较,以这种方式创建:

var currentDate = new Date();

如何将“8位数字日期字符串”转换为合适的日期格式,以便与currentDate进行比较?

v7pvogib

v7pvogib1#

使用substring方法和substring off 4个元素并将其赋值给你的新日期,然后一次将两个元素进行substring off并相应地存储月份和日期。

var dateString  = "20120515";
var year        = dateString.substring(0,4);
var month       = dateString.substring(4,6);
var day         = dateString.substring(6,8);

var date        = new Date(year, month-1, day);
var currentDate = new Date();

现在,您可以使用正规运算符比较这两个日期。

brccelvz

brccelvz2#

如果你想要一个小的数据库,你可以使用moment.js

var a = moment("20120515", "YYYYMMDD");
// then use any of moment's manipulation or display functionality
a.format("MMM Do YYYY"); // May 15th 2012
a.fromNow(); // 14 hours ago
a.calendar(); // Today at 12:00 AM
xdnvmnnf

xdnvmnnf3#

要正确处理本地时区,必须将其显式地加到计算时间上

function dateStringToDate(dateString) {
  try {
    var year = dateString.substring(0, 4);
    var month = dateString.substring(4, 6);
    var day = dateString.substring(6, 8);
    var date = new Date(year, month - 1, day);
    const offset = date.getTimezoneOffset()
    date = new Date(date.getTime() - (offset * 60 * 1000));
    return date;
  } catch (error) {
    return null;
  }
}
function dateStringToDate(dateString) {
  try {
    var year = dateString.substring(0, 4);
    var month = dateString.substring(4, 6);
    var day = dateString.substring(6, 8);
    var date = new Date(year, month - 1, day);
    const offset = date.getTimezoneOffset()
    date = new Date(date.getTime() - (offset * 60 * 1000));
    return date;
  } catch (error) {
    return null;
  }
}

console.log(dateStringToDate("20211212"))
console.log(dateStringToDate("20211213"))
console.log(dateStringToDate("20211214"))
fzwojiic

fzwojiic4#

......其他一些“一行程序”方法可实现此目的:
(They取一个类似dts='20020704';值并返回日期对象[dt]。)

var dt=new Date(dts.slice(0,4), (dts[4]+dts[5])-1, dts[6]+dts[7]);

或者...

var m=dts.match(/(....)(..)(..)/), dt=new Date(m[1],m[2]-1,m[3]);

或者...

var m=dts.match(/.{1,2}/g), dt=new Date(m[0]+m[1],m[2]-1,m[3]);

最后一个最短,但第一个可能是最有效的,因为它没有使用正则表达式(但这是无关紧要的,除非你用它处理大量的数据)。

相关问题