0

我有一个页面,我想在其中查找所有日期时间值。

我想找到所有日期时间值并将它们从回历日期时间转换为标准日期时间。

如何使用 javascript 找到日期时间值并进行更改?

例如:

我想要这段代码在 html 中

<td class="ms-vb2"><nobr>18/02/1391 14:07</nobr></td>

我想找到日期时间值 (18/02/1391 14:07),然后使用 javascript 将其更改为 (14/08/2012 10:15)。

编辑

我使用此代码并找到所有日期值

var re =  /[0-3]\d\/[01]\d\/\d{4}/g;
var dates = $("body").text().match(re);

如何将其替换为新日期???

4

3 回答 3

0

由于 DOM 的工作方式,我建议将您的日期时间值包装在一个特定的标签中(可能带有一个特定的类名)。因此<nobr>08/02/1391 14:07</nobr>,您可以拥有<span class="datetime">8/02/1391 14:07</span>. 这将使您更容易找到您的日期,因为您可以使用 DOM 来识别带有日期时间的标签。

您可以使用 jQuery 的选择器来获取值....

$('.datetime').html()

...或者你可以使用 vanilla Javascript。

document.getElementsByClassName('datetime')

这是查找所有日期时间的第一步。之后,对于每个日期时间,您需要通过调用split()函数将其转换为可用格式,该函数应根据分隔符将字符串拆分为数组。默认分隔符是空格,因此您可能必须重复此操作以删除斜杠。所以对于 jQuery,你有...

var mydate = $('.datetime').html()
var mydateArray = mydate.split(); // This doesn't deal with nested elements, since it's an example.

...在 vanilla Javascript(javanillascript ???)中,您将拥有:

var mydate = document.getElementsByClassName('datetime')
var mydateArray = mydate.split(); // This doesn't deal with nested elements, since it's an example.

将日期时间字符串拆分为可用块后,您需要将数学应用于所有这些块。这是此解决方案中最复杂的部分。

但是,一旦您计算了日期并重新格式化以供显示,您就可以简单地在 HTML 中设置它们。在 jQuery 中:

var myNewDate = convertHijriToStandard(date);
$('.datetime').html(myNewDate);

请注意,如果您正在寻找最大的浏览器支持,我建议您使用 jQuery。您的日期转换可能不使用 jQuery,但如果您支持旧浏览器,则处理 DOM 元素可能会容易得多。

祝你好运。我知道这不是一个完整的解决方案,但希望它可以帮助您入门。如果您有任何问题,请告诉我。

于 2012-08-25T06:25:20.430 回答
0

查看http://www.regular-expressions.info/dates.html我们可以这样做来查找从 1300 到包括 1400 的所有日期:

var reg = /^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](13|14)\d\d$/g

所以你可以做

var dates = document.body.innerHTML.match(reg);

但是如何从中转换:http ://en.wikipedia.org/wiki/List_of_Islamic_years#Modern我将留给塔木德学者

reg 并不完美 - 似乎有人需要让它更好地工作。如果它有效,您可以在 jQuery ( DEMO )中执行此操作

var reg = /(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](13|14)\d\d \d\d:\d\d/g;
$(function() {
  var dates = $("body").text().match(reg);
  console.log(dates);  
  $.each(dates,function(date) {
      console.log(date);
      $("td:contains("+date+")").each(function() {
          $(this).text($(this).text().replace(date,"new date"));
      });
  });
});
于 2012-08-25T07:22:17.313 回答
0

您将从使用以下特定元素的特定元素开始递归所有文本节点(使用mplungjan 的简单正则表达式):

// Recursively replace text in text nodes of elements
function replaceText(el) {

  var node, nodes = el.childNodes;
  var re = /[0-3]\d\/[01]\d\/\d{4} [012]\d:[012]\d/g;
  var t;

  for (var i=0, iLen=nodes.length; i < iLen; i++) {
    node = nodes[i];

    // Replace content of text nodes
    if (node.nodeType == 3) {
      t = node.data.match(re);

      // See if has a date
      if (t) {

        // Iterate over members of t, replacing Hijri dates with Gregorian dates
        // convertDate should be a function to do the conversion
        for (var j=0, jLen=t.length; j<jLen; j++) {
          node.data = node.data.replace(t[j], convertDate(t[j])); 
        }
      }

    // Recurse over elements to get at child text nodes
    } else if (node.childNodes) {
      replaceText(node);
    }
  }
}

如果打算完成整个文档,请将 body 元素传递给它。

于 2012-08-25T08:43:35.340 回答