我只想从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)
如何将时间分隔到树枝中的单独显示中,又如何根据输入的时间保留正确的时间。
如何将其输入到树枝中?
如果人们在不同时区输入内容或查看内容,我不想改变时间。 例如-某人在澳大利亚墨尔本创建内容,而其他人在英国伦敦查看该内容-无论时间如何,都应显示相同的内容。
答案 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;
}