Название дней недели

#
Название дней недели
Подскажите, пожалуйста, как можно вывести дату информационного элемента и название дня недели?

Спасибо!
#
Re: Название дней недели
Не проверял, но ресурсу можно верить
http://stackoverflow.com/questions/16739141/can-a-date-be-converted-to-day-of-week-month-dd-within-xsl

Вот еще код, который вычисляет номер дня недели (Воскресенье - 0,..., Суббота - 6). Немного его доработав, вы сможете вывести день недели:

  <xsl:template name="calculate-day-of-the-week">
    <xsl:param name="date-time"/>
    <xsl:param name="date" select="substring-before($date-time,'T')"/>
    <xsl:param name="year" select="substring-before($date,'-')"/>
    <xsl:param name="month"
          select="substring-before(substring-after($date,'-'),'-')"/>
    <xsl:param name="day" select="substring-after(substring-after($date,'-'),'-')"/>
    
    <xsl:variable name="a" select="floor((14 - $month) div 12)"/>
    <xsl:variable name="y" select="$year - $a"/>
    <xsl:variable name="m" select="$month + 12 * $a - 2"/>
  
    <xsl:value-of select="($day + $y + floor($y div 4) - floor($y div 100)
    + floor($y div 400) + floor((31 * $m) div 12)) mod 7"/>
  
  </xsl:template>
ARTatom
#
Re: Название дней недели
artatom,
Спасибо! Такой пример есть и в книге Мангано (скорее всего, это и есть оттуда). Сейчас вот как раз пытаюсь разобраться как его применить на практике...
#
Re: Название дней недели
Вот, например, куда передать значение тега date из XML в этот шаблон?


<xsl:template name="calculate-day-of-the-week">
<xsl:param name="date-time"/>
<xsl:param name="date" select="substring-before($date-time,'T')"/>
<xsl:param name="year" select="substring-before($date,'-')"/>
<xsl:param name="month"
select="substring-before(substring-after($date,'-'),'-')"/>
<xsl:param name="day"
select="substring-after(substring-after($date,'-'),'-')"/>
<xsl:variable name="a" select="floor((14 - $month) div 12)"/>
<xsl:variable name="y" select="$year - $a"/>
<xsl:variable name="m" select="$month + 12 * $a - 2"/>
<xsl:value-of select="($day + $y + floor($y div 4) - floor($y div 100)
+ floor($y div 400) + floor((31 * $m) div 12)) mod 7"/>
</xsl:template>
#
Re: Название дней недели
Вариант 1:
Зайдите в настройки информационной системы и установите значение: %Y-%m-%d %A %a
Где %A полное название дня недели, а %a краткое название.

PS: Подозреваю, что иногда может выводить по английски из-за локалей

Вариант 2:
Создать XSL шаблон с таким содержанием: https://gist.github.com/Roman-Fov/ff8563c4abca79ba12c7
Импортировать его в нужную таблицу стилей и вызвать вот так:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.1"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:hostcms="http://hostcms.ru/"
            exclude-result-prefixes="hostcms">
   <xsl:import href="hostcmsfiles/xsl/315.xsl"/>
   <xsl:output version="1.0"
            xmlns="http://www.w3.org/TR/xhtml1/strict"
            doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
            encoding="utf-8"
            indent="yes"
            method="html"
            omit-xml-declaration="no"
            media-type="text/xml"/>

   <xsl:template match="/informationsystem">
      <xsl:apply-templates select="informationsystem_item"/>
   </xsl:template>

   <xsl:template match="informationsystem_item">
      <h1>
         <xsl:value-of select="name"/>
      </h1>
      <h2>
         <xsl:call-template name="get_weekday_name">
            <xsl:with-param name="datetime" select="datetime"/>
         </xsl:call-template>
      </h2>
   </xsl:template>
</xsl:stylesheet>


Вместо 315.xsl ваш номер шаблона

Формат datetime должен быть YYYY-MM-DD hh:mm:ss
Email: roman.fov@gmail.com Skype: roman-fov
#
Re: Название дней недели
Roman Fov,
К сожалению, не получается. Появляется ошибка....
#
Re: Название дней недели
Какой вариант пробуете и какой текст ошибки?
Email: roman.fov@gmail.com Skype: roman-fov
#
Re: Название дней недели

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:hostcms="http://www.hostcms.ru/"
  exclude-result-prefixes="hostcms">
  <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>

<xsl:template match="/informationsystem">

    <!-- <ul>
      <xsl:for-each select="informationsystem_item">
        <li>
          <xsl:value-of select="name" disable-output-escaping="yes"/>
          <text> - </text>
          <xsl:call-template name="calculate-day-of-the-week">
            <xsl:with-param name="value" select="date" />
          </xsl:call-template>
      </xsl:for-each>
    </ul> -->

    <xsl:call-template name="calculate-day-of-the-week">
      <xsl:with-param name="value">01.10.2015</xsl:with-param>
    </xsl:call-template>
    <br/>

    <xsl:call-template name="calculate-day-of-the-week">
      <xsl:with-param name="value">01.10.2015 03:12:13</xsl:with-param>
    </xsl:call-template>
    <br/>

    <xsl:call-template name="calculate-day-of-the-week">
      <xsl:with-param name="value">2015-10-01 03:12:13</xsl:with-param>
    </xsl:call-template>
    <br/>

  </xsl:template>

  <xsl:template name="calculate-day-of-the-week">
    <xsl:param name="value"/>
    <!-- Примеры входных значений:
        <date>01.10.2015</date>
        <datetime>01.10.2015 09:56:53</datetime>
        <start_datetime>0000-00-00 00:00:00</start_datetime>
        <end_datetime>0000-00-00 00:00:00</end_datetime>
    -->
    <!-- Приводим входное значение к формату ГГГГММДД -->
    <xsl:variable name="date">
      <xsl:choose>
        <!-- start_datetime или end_datetime -->
        <xsl:when test="contains($value,'-')">
          <!-- очищаем от разделителей '-' -->
          <xsl:value-of select="translate($value,'-','')"/>
        </xsl:when>
        <!-- date или datetime -->
        <xsl:otherwise>
          <!-- выделяем дату и очищаем от разделителей '.' -->
          <xsl:variable name="date-reverse" select="translate($value,'.','')"/>
          <!-- т.к. в данном случае дата имеет обратный порядок (ДД.ММ.ГГГГ), то "перевернем" ее -->
          <xsl:value-of select="concat(substring($date-reverse,5,4), concat(substring($date-reverse,3,2), substring($date-reverse,1,2)))"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
    <xsl:variable name="year"  select="substring($date,1,4)"/>
    <xsl:variable name="month" select="substring($date,5,2)"/>
    <xsl:variable name="day"   select="substring($date,7,2)"/>
    <xsl:variable name="a" select="floor((14 - $month) div 12)"/>
    <xsl:variable name="y" select="$year - $a"/>
    <xsl:variable name="m" select="$month + 12 * $a - 2"/>
    <xsl:variable name="day-of-week" select="($day + $y + floor($y div 4) - floor($y div 100)
  + floor($y div 400) + floor((31 * $m) div 12)) mod 7"/>
    <!-- Нумерация дней недели начинается с воскресенья -->
    <xsl:choose>
      <xsl:when test="$day-of-week = 0">Воскресенье</xsl:when>
      <xsl:when test="$day-of-week = 1">Понедельник</xsl:when>
      <xsl:when test="$day-of-week = 2">Вторник</xsl:when>
      <xsl:when test="$day-of-week = 3">Среда</xsl:when>
      <xsl:when test="$day-of-week = 4">Четверг</xsl:when>
      <xsl:when test="$day-of-week = 5">Пятница</xsl:when>
      <xsl:otherwise>Суббота</xsl:otherwise>
    </xsl:choose>
  </xsl:template>

</xsl:stylesheet>
ARTatom
#
Re: Название дней недели
Подскажите, пример рабочий? Мб кто то еще сталкивался с этим? Необходимо вычислять день недели по дате
#
Re: Название дней недели
PakoGonsalezZ писал(а):
Необходимо вычислять день недели по дате

Я бы сделал в TPL через Smarty date_format
%u - номер дня недели [1,7], где 1-ый день - понедельник
{$oInformationsystem_Item->datetime|date_format:"%u"}
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
Авторизация