【问题标题】:Sort date strings javascript排序日期字符串javascript
【发布时间】:2018-02-22 01:11:46
【问题描述】:

我将日期时间和日期存储为 javscript 中的字符串,我需要进行比较。

将它们保留为字符串似乎可行:

const date1 = '2016-01-26 05:20:44'
const date2 = '2016-01-26 06:20:44'
const date3 = '2016-02-26'

date1 > date2 //false
date1 < date2 //true
date3 > date2 //true
date3 > date1 //true
date1 > date3 //false

问题:我可以依赖这个吗?还是这是一种“有效,但不可靠”的交易?

我是否应该将日期字符串转换为日期对象(使用datemoment

【问题讨论】:

  • 是的,但严格来说你应该使用localeCompare,例如date1 &gt; date2 应该是 date1.localCompare(date2) &gt; 0

标签: javascript string date comparison


【解决方案1】:

如果这是您的格式,它应该可以继续工作。想一想:这种格式的主要优点之一就是它是可排序的。

当然 Date 对象本身也是可排序的。用于比较它们的内部 valueOf 方法返回自固定时间以来的毫秒数。

【讨论】:

  • 谢谢!我认为日期部分始终是可排序的(多年来一直在文件名中使用它)但不确定时间部分(以及比较混合日期和日期时间)。
【解决方案2】:

更新.....

function removeAllNoNumber(a) {
   return  a.toString().replace(/\D/g, '');
}

function padRight(source, padChar, padCount) {
  var dif = padCount - source.toString().length;
  if (dif <= 0) {
     return source;
  } else {
     var c = "";
     for (var i = 0; i < dif; i++) {
         c += padChar.toString();
     }
         return (source + c);
     }
}

function timeToInt(a){
     return parseInt(padRight(removeAllNoNumber(a),"0",14),10);
}


  var date1 = timeToInt("2016-01-26 05:20:44"); //20160126052044 
  var date2 = timeToInt("2016-01-26 06:20:44"); //20160126062044
  var date3 = timeToInt("2016-01-26"); //20160126000000

   if (date1 < date2) {

     alert("here");
   }

【讨论】:

  • 理想情况下,我想这样做而不转换为日期对象。
  • 我使用字符串在没有日期对象的情况下更新...可能有帮助
  • 使用String.prototype.localeCompare比较简单得多。
【解决方案3】:

如果格式从不更改,则可以使用substring()从问题中的给定字符串中提取日期

date1.substring(0,10)
date2.substring(0,10)
date3.substring(0,10)

输出到子字符串

"2016-01-26"

"2016-01-26"

"2016-02-26"

现在您可以通过比较它们来比较提取的日期子字符串

date1.substring(0,10) > date1.substring(0,10) //false

它有点乱,但它会让你的主字符串保持不变。

【讨论】:

    猜你喜欢
    • 2020-12-14
    • 2019-11-07
    • 2012-11-09
    • 2014-02-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    相关资源
    最近更新 更多