【问题标题】:Convert milliseconds string to date in javascript在javascript中将毫秒字符串转换为日期
【发布时间】:2015-06-09 12:30:41
【问题描述】:

有很多关于将毫秒转换为日期格式的问题得到解答,但没有一个能够解决我的问题。

我的 javascript 代码中有一个字符串(而不是时间)。格式如下

1380549600000+1000

当我尝试使用以下代码解析它时,它给了我“无效日期”错误。

我的主要目标是将此字符串转换为 dd/mm/yyyy 格式。因此正在考虑将其转换为日期并应用“getMonth”等方法

<script>
    var modDate = "1380549600000+1000"; //Note the value is in "" hence a string
    var d = new Date(modDate); //Invalid date error here
    document.getElementById("demo").innerHTML = d;
</script>

以下工作正常。但这不是我得到的格式。

<script>
    var modDate = 1380549600000+1000; //Note the value is no longer in ""
    var d = new Date(modDate); //No problems here
    document.getElementById("demo").innerHTML = d;
</script>

请帮忙。 提前致谢。

干杯。

【问题讨论】:

  • +1000 你想说什么?
  • 如果您删除完全无效的+1000 并将其解析为数字,它应该可以正常工作
  • 使用 eval() 进行评估,然后使用您的日期逻辑,因为如果您尝试解析 + 将被视为非法字符。
  • 那是什么格式? @leopik 如果是时区,则为 +1s 时区 0_o
  • 所以你必须检查你的字符串中是否有一个非数字字符,如果是,删除这个非数字之后的以下字符(数字),得到日期格式的结果。

标签: javascript jquery date datetime


【解决方案1】:

编辑:-

eval 不是最好的方法,使用 eval 不安全,所以改用这个:-

var modDate = "1380549600000+1000"
var temp = modDate.split("+");
modDate = parseInt(temp[0]) + parseInt(temp[1]);

我不确定您是否需要添加 1000,如果不需要,可以在一行中完成:-

modDate = parseInt(modDate.split("+")[0])

旧方法:-

<script>
var modDate = eval("1380549600000+1000"); //Note the value is in "" hence a string
var d = new Date(modDate); //Invalid date error here
document.getElementById("demo").innerHTML = d;
</script>

【讨论】:

  • 将字符串评估为 javascript 并返回结果,从字面上看,就是数学运算。
  • 在 + 上拆分更安全,然后正常添加
  • 没错,这是一个假设,但考虑到格式很可能是一个假设。我想 OP 还没有发现时区添加之间的区别。
  • 但是,评估来自“某个地方”的字符串似乎是一个可怕的想法。
  • eval 在 JS 中是一种糟糕的做法
【解决方案2】:

不使用 eval 的其他方法:

var modDate = "1380549600000+1000";
var d = new Date(modDate.split("+")
    .map(parseFloat)
    .reduce(function(a,b){return a + b;}));

【讨论】:

    【解决方案3】:

    使用parseInt获取字符串的数值(比eval安全,但前提相同):

    modDate = (isNaN(modDate)) ? parseInt(modDate, 10) : modDate;
    
    if !isNaN(modDate) {
        var d = new Date(modDate);
        document.getElementById("demo").innerHTML = d;
    } else {
        console.log("Value in modDate not a number");
    }
    

    【讨论】:

    • 这会忽略+之后的潜在相关信息
    • 在我看来,我们正在尝试安全合理地考虑字符串的任何可能值,这是不现实的。 + 后面会有哪些不需要更改原始问题的参数的相关信息?
    • 这个问题非常不清楚,我承认。只是强调这样一个事实,即这会产生与 OP 的“工作”示例不同的输出。
    • 你缺少一个基数
    • 可选,会导致某些八进制问题
    【解决方案4】:

    我不得不在这里使用一些混搭的答案来让我的工作。 我的日期值作为字符串发送到我的网页,如下所示:“/Date(978278400000-0500)/”

    所以我这样解析它,让它显示为有效日期:

    // sDateString = "/Date(978278400000-0500)/";
     var modDate = sDateString.replace(/[\/Date\(\)]/g, "");
     return new Date(parseInt(modDate, 10));
    //returns: Sun Dec 31 2000 11:00:00 GMT-0500 (Eastern Standard Time) {}
    

    【讨论】:

      猜你喜欢
      • 2012-09-12
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 2012-01-15
      • 1970-01-01
      相关资源
      最近更新 更多