【问题标题】:convert custom date string to date object将自定义日期字符串转换为日期对象
【发布时间】:2013-03-07 19:34:03
【问题描述】:

如何将日期的字符串表示形式转换为真正的 javascript 日期对象?

日期格式如下

E MMM dd HH:mm:ss Z yyyy

例如

Sat Jun 30 00:00:00 CEST 2012

提前致谢

编辑: 我的工作解决方案基于接受的答案。要让它在 IE8 中工作,您必须将月份部分(例如 Jun)替换为月份编号(例如 5 代表六月,因为一月是 0)

【问题讨论】:

  • 解析,创建一个有效的字符串并调用 Date 构造函数。
  • 我该如何处理'Z'?
  • 我认为您需要以某种方式获取时区偏移并手动设置它
  • 使用数据库(准确地说是预编译的哈希图)或依赖构造函数。一种形式允许时区字符串,IIRC

标签: javascript


【解决方案1】:

您的日期字符串大部分可以按原样解析,但CEST 不是ISO 8601 中的有效时区,因此您必须手动将其替换为+0200

因此,一个简单的解决方案可能是:

var str = "Sat Jun 30 00:00:00 CEST 2012";
str = str.replace(/CEST/, '+0200');
var date = new Date(str);

如果您想支持由其名称定义的其他时区,您必须找到它们的可能值和相关偏移量。您可以在地图中注册它们:

var replacements = {
    "ACDT": "+1030",
    "CEST": "+0200",
    ... 
};
for (var key in replacements) str = str.replace(key, replacements[key]);
var date = new Date(str);

This might be a good list of time zone abbreviation.

【讨论】:

  • 在 Firefox 中测试过?我记得 Firefox 对它接受的日期非常严格。不过,它确实可以在 Chrome 中使用。
  • 在 Firefox 和 Chrome 中测试。
  • 你也可以在 IE 中测试,或者我应该吗?
  • 语言环境也可能有问题。 “君”几乎不是一个通用符号。
【解决方案2】:

您可以使用以下代码将字符串转换为日期时间:

var sDate = "01/09/2013 01:10:59";
 var dateArray = sDate.split('/');
 var day = dateArray[1];

 // Attention! JavaScript consider months in the range 0 - 11
 var month = dateArray[0] - 1;
 var year = dateArray[2].split(' ')[0];
 var hour = (dateArray[2].split(' ')[1]).split(':')[0];
 var minute = (dateArray[2].split(' ')[1]).split(':')[1];
 var objDt = new Date(year, month, day, hour, minute);
 alert(objDt);

【讨论】:

    猜你喜欢
    • 2023-02-16
    • 2020-05-21
    • 2020-11-30
    • 2011-03-07
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多