如何在没有时区干扰的情况下在树枝中渲染时间

时间:2019-04-07 04:34:12

标签: twig drupal-8

我只想从Drupal Date字段中获取时间,并将其与日期分开放置在树枝模板中。

在我的活动的树枝模板中,我当前列出了3种日期:

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';

import '../elements/drawer.dart';

class ClimaticConditions1 extends StatefulWidget
{
  @override
  State<StatefulWidget> createState() {
    return _ClimaticConditionsState1();
  }
}

class _ClimaticConditionsState1 extends State<ClimaticConditions1>{

  var weather;
  var t=0.0;
  var temp = [];
  void fetch(){
    http.get('https://iot-minor-project.firebaseio.com/DHT11.json')
    .then((http.Response response){
      this.weather = json.decode(response.body);
      print(this.weather);
      this.weather.forEach((key, val){
        temp.add(val);
      });
    });
    print(temp);
  }

  @override
  Widget build(BuildContext context)
  {
    return Scaffold(
      drawer: AppDrawer(),
      appBar: AppBar(
        title: Text('IoT Reading of Farm'),
      ),
      body:
       Stack(
           fit: StackFit.expand,`enter code here`
          children: <Widget>[
            Image(
                 image: new AssetImage("assets/iot.jpg"),
                 fit: BoxFit.cover,
                 color: Colors.black54,
                 colorBlendMode: BlendMode.darken,
            ),
      Column(
        children: <Widget>[
          Padding(
            padding: EdgeInsets.all(20.0),
            child: Column(
              children: <Widget>[
                Padding(padding: EdgeInsets.only(top: 60.0),),
                Row(
                  children: <Widget>[
                    Row(
                      children: <Widget>[
                        Text('                Temperature: ',
                          style: TextStyle(
                            fontSize: 15.0,
                            fontWeight: FontWeight.w700,
                            color: Colors.white,
                          ),
                        ),

                        Text("              "+temp[2].toString(),style: TextStyle(color: Colors.white),)
                      ],
                    ),
                  ]
                ),
                Padding(padding: EdgeInsets.only(top: 60.0),),
                Row(
                  children: <Widget>[
                    Row(
                      children: <Widget>[
                        Text('                Humidity: ',
                          style: TextStyle(
                            fontSize: 15.0,
                            fontWeight: FontWeight.w700,
                            color: Colors.white,
                          ),
                        ),
                        Text("              "+temp[0].toString(),style: TextStyle(color: Colors.white),)
                      ],
                    ),
                  ]
                ),
                Padding(padding: EdgeInsets.only(top: 60.0),),
                Row(
                  children: <Widget>[
                    Row(
                      children: <Widget>[
                        Text('                Soil Moisture: ',
                          style: TextStyle(
                            fontSize: 15.0,
                            fontWeight: FontWeight.w700,
                            color: Colors.white,
                          ),
                        ),
                        Text("              "+temp[11].toString(),style: TextStyle(color: Colors.white),)
                      ],
                    ),
                  ]
                ),
                Padding(padding: EdgeInsets.only(top: 60.0),),
                Container(
                  padding: EdgeInsets.all(10.0),
                  height: 70.0,
                  width: 130.0,
                  child: RaisedButton(

                    onPressed: (){
                      fetch();
                    },
                  child: Row(
                    children: <Widget>[
                      Icon(Icons.refresh),
                      Text('Refresh'),
                    ],
                  ),
                  color: Colors.green,
                )
                )
              ]
            )
          )
        ]
      )
          ]
    )
    );
  }
}

显示所有字段。 时间(从“日期”字段获得)正确显示为; 28/04/2019-1:11 根据创建内容时输入的时间,这是正确的时间。 在同一页面上,使用时:

{{ content }}

28/04/2019-1:11 也显示正确。 但我想抓住时间只与日期分开显示 所以我把它放在树枝上:

{{ content.field_date_start }}

显示为: 上午3:11

这是不正确的,关闭了14小时(输入时的1.11是1.11 pm)

如何将时间分隔到树枝中的单独显示中,又如何根据输入的时间保留正确的时间。

如何将其输入到树枝中?

如果人们在不同时区输入内容或查看内容,我不想改变时间。 例如-某人在澳大利亚墨尔本创建内容,而其他人在英国伦敦查看该内容-无论时间如何,都应显示相同的内容。

1 个答案:

答案 0 :(得分:0)

Drupal按照UTC时区将日期保存在数据库中。例如,如果您在配置文件中选择了伦敦时区(UTC + 1)作为用户输入09:00 AM作为时间,则该时间将保存为08:00 AM在数据库中。如果网站的时区设置为伦敦(UTC +1),则同样如此。

我建议对字段进行预处理并为开始时间设置一个变量。

$(function() {

    // Check if it is iOS
    var isiOS = (navigator.userAgent.match(/(iPad|iPhone|iPod)/g) ? true : false);

    if(isiOS === true) {

        // Store -webkit-tap-highlight-color as this gets set to rgba(0, 0, 0, 0) in the next part of the code
        var tempCSS = $('a').css('-webkit-tap-highlight-color');

        $('body').css('cursor', 'pointer')                                    // Make iOS honour the click event on body
                 .css('-webkit-tap-highlight-color', 'rgba(0, 0, 0, 0)');     // Stops content flashing when body is clicked

        // Re-apply cached CSS
        $('a').css('-webkit-tap-highlight-color', tempCSS);

    }

});

然后将模板中的值打印为

function HOOK_preprocess_node(&$variables) {
  $node = $variables['elements']['#node'];
  $timezone = drupal_get_user_timezone();
  $formatter = \Drupal::service('date.formatter');
  $field_date_start = $node->get('field_date_start')->getValue()->getTimestamp();
  $time = $formatter->format($field_date_start, 'custom', 'g:ia', $timezone);
  $variables['start_time'] = $time;
}