{"id":2329,"date":"2018-04-07T08:11:10","date_gmt":"2018-04-07T07:11:10","guid":{"rendered":"http:\/\/pcool.dyndns.org:8080\/statsbook\/?page_id=2329"},"modified":"2025-06-30T17:43:12","modified_gmt":"2025-06-30T16:43:12","slug":"equation-of-time","status":"publish","type":"page","link":"https:\/\/pcool.dyndns.org\/index.php\/equation-of-time\/","title":{"rendered":"Equation of Time"},"content":{"rendered":"\n<p><strong>Introduction<\/strong><\/p>\n\n\n\n<p>Noon is 12 o&#8217;clock at daytime. However, the chronological time does not coincide with solar noon, when the sun reaches its highest point in the sky. This is due to three factors:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Longitude<\/li>\n\n\n\n<li>The equation of time<\/li>\n\n\n\n<li>Daylight savings<\/li>\n<\/ul>\n\n\n\n<p>In this section, daylight savings are not taken into consideration. But the other factors are explored to calculate the time of local solar noon. Furthermore, the timing of sun rise and sun set are estimated and graphically presented.<\/p>\n\n\n\n<p><strong>Longitude correction<\/strong><\/p>\n\n\n\n<p>Latitude and longitude are used to describe a location on earth. They can be expressed in degrees, minutes and seconds (DMS notation) or in digital degrees (DD notation). In software programs, it is easiest to use the DD notation. It is however straight forward to convert from one format to the other using the following functions:<\/p>\n\n\n\n<p>R download:&nbsp;<a href=\"https:\/\/pcool.dyndns.org:\/wp-content\/R_functions\/convert_dms_dd.txt\" target=\"_blank\" rel=\"noreferrer noopener\">convert_dms_dd<\/a><\/p>\n\n\n\n<p>R download:&nbsp;<a href=\"https:\/\/pcool.dyndns.org:\/wp-content\/R_functions\/convert_dd_dms.txt\" target=\"_blank\" rel=\"noreferrer noopener\">convert_dd_dms<\/a><\/p>\n\n\n\n<p>In Britain, the time corresponds to the time at Greenwich (GMT) at the null meridian. When located to the east, solar time is earlier than GMT and to the west later. To calculate solar time, it is necessary to correct for this difference in longitude. <em><strong>The correction required is 240 seconds for every degree<\/strong><\/em> (1 day per 360 degrees = 24 \u00d7 60 \u00d7 60 \/ 360 = 240 seconds per degree).<\/p>\n\n\n\n<p><strong>Equation of Time<\/strong><\/p>\n\n\n\n<p>The equation of time describes the difference&nbsp;between mean solar time (chronological time as shown on the clock) and the apparent solar time (as shown on a sundial). This is mainly caused by two factors:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The obliquity of the ecliptic plane, which is inclined by approximately 23 degrees relative to the earth&#8217;s equator<\/li>\n\n\n\n<li>The eccentricity of the earth&#8217;s orbit around the sun<\/li>\n<\/ul>\n\n\n\n<p>The effect of both factors can be summarised in the following formula (or equation of time) with reasonable accuracy (other approximations have been described):<\/p>\n\n\n\n<div class=\"wp-block-mathml-mathmlblock\"> \\( Correction =9.87 sin(2B) &#8211; 7.53 cos(B) &#8211; 1.5 sin(B) \\)<script src=\"https:\/\/pcool.dyndns.org\/wp-includes\/js\/dist\/hooks.min.js?ver=dd5603f07f9220ed27f1\" id=\"wp-hooks-js\"><\/script>\n<script src=\"https:\/\/pcool.dyndns.org\/wp-includes\/js\/dist\/i18n.min.js?ver=c26c3dc7bed366793375\" id=\"wp-i18n-js\"><\/script>\n<script id=\"wp-i18n-js-after\">\nwp.i18n.setLocaleData( { 'text direction\\u0004ltr': [ 'ltr' ] } );\n\/\/# sourceURL=wp-i18n-js-after\n<\/script>\n<script  async src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/mathjax\/2.7.7\/MathJax.js?config=TeX-MML-AM_CHTML\" id=\"mathjax-js\"><\/script>\n<\/div>\n\n\n\n<p>where,<\/p>\n\n\n\n<div class=\"wp-block-mathml-mathmlblock\">\\(B =  2\\pi\\frac{(Day Number -81)} {365} \\)<\/div>\n\n\n\n<p class=\"is-style-text-annotation is-style-text-annotation--1\">Day number 81 is 22nd March.<\/p>\n\n\n\n<p class=\"is-style-text-annotation is-style-text-annotation--2\">For leap years, divide be 366<\/p>\n\n\n\n<p>R download:&nbsp;<a href=\"https:\/\/pcool.dyndns.org:\/wp-content\/R_functions\/equation_of_time.txt\" target=\"_blank\" rel=\"noreferrer noopener\">equation_of_time<\/a><\/p>\n\n\n\n<p>With this formula, the timing of solar noon can be estimated. Subsequently, if the declination of the sun is know, the timing of sun set and sun rise can also be estimated as described below.<\/p>\n\n\n\n<p><strong>Sun declination<\/strong><\/p>\n\n\n\n<p>The declination of the sun is estimated using the following formula:<\/p>\n\n\n\n<div class=\"wp-block-mathml-mathmlblock\"> \\( Declination =23.45^\\circ \\cdot \\sin \\left( \\frac{2\\pi}{365} \\cdot (DayNumber &#8211; 81) \\right) \\)<\/div>\n\n\n\n<p class=\"is-style-default\">R download:&nbsp;<a href=\"https:\/\/pcool.dyndns.org:\/wp-content\/R_functions\/sun_declination.txt\" data-type=\"link\" data-id=\"https:\/\/pcool.dyndns.org:\/wp-content\/R_functions\/sun_declination.txt\" target=\"_blank\" rel=\"noreferrer noopener\">sun_declination<\/a><\/p>\n\n\n\n<p><strong>Sun rise formula<\/strong><\/p>\n\n\n\n<p>Knowing the solar declination on a particular day, the sun rise and sun set times can be estimated using the following formula (all angles in radians):<\/p>\n\n\n\n<div class=\"wp-block-mathml-mathmlblock\">\\( W = \\cos(w) = \\frac{\\sin(\\text{Altitude}) &#8211; \\sin(\\text{Latitude}) \\cdot \\sin(\\text{Declination})}{\\cos(\\text{Latitude}) \\cdot \\cos(\\text{Declination})} \\)<\/div>\n\n\n\n<div class=\"wp-block-mathml-mathmlblock\"><\/div>\n\n\n\n<p>where the declination can be estimated using the formula described above. To convert to radians:<\/p>\n\n\n\n<div class=\"wp-block-mathml-mathmlblock\">\\(Declination[rad] = Declination[degrees] \\cdot \\frac{\\pi}{180}\\)<\/div>\n\n\n\n<p>To convert the latitude to radians:<\/p>\n\n\n\n<div class=\"wp-block-mathml-mathmlblock\">\\(Latitude[rad] = Latitude[degrees] \\cdot \\frac{\\pi}{180}\\)<\/div>\n\n\n\n<p>If the altitude is zero, the formula gives the timing that the <strong><em>centre of the solar disc<\/em><\/strong> is at the horizon. To estimate when the top of the solar disc reaches the horizon, subtract 16 arc minutes for the semi-diameter of the solar disc and 34 arc minutes for atmospheric refraction (different under different atmospheric conditions). In total, subtract 50 arc minutes:<\/p>\n\n\n\n<div class=\"wp-block-mathml-mathmlblock\">\\( Altitude[rad] = \\left( -\\frac{5}{6} \\cdot \\frac{\\pi}{180} \\right) + \\left( s \\cdot \\frac{\\pi}{180} \\right)\\)<\/div>\n\n\n\n<p>The parameter s corrects for the solar altitude at different timings. For sun rise and sun set, s should be set at zero. Twilights can be estimated by varying s:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>s =&nbsp; &nbsp; 0&nbsp; sun rise \/ sun set<\/li>\n\n\n\n<li>s =&nbsp; &nbsp;-6&nbsp; civil twilight<\/li>\n\n\n\n<li>s = -12&nbsp; nautical twilight<\/li>\n\n\n\n<li>s = -18&nbsp; astronomical twilight<\/li>\n<\/ul>\n\n\n\n<p>The formula returns a value w, that can be converted to an hour angle (in radians) by taking the arccos (inverse function of the cosine) of w:<\/p>\n\n\n\n<div class=\"wp-block-mathml-mathmlblock\">\\(HourAngle[rad] =  arccos(W)\\)<\/div>\n\n\n\n<p>which in turn can be converted to degrees:<\/p>\n\n\n\n<div class=\"wp-block-mathml-mathmlblock\">\\( HourAngle[degrees] = HourAngle[rad] \\cdot \\frac{180}{\\pi} \\)<\/div>\n\n\n\n<p>To calculate the sun rise and sun set times before and after solar noon (in seconds):<\/p>\n\n\n\n<div class=\"wp-block-mathml-mathmlblock\">\\(RiseSet[seconds] = HourAngle[degrees] \\cdot 240 \\)<\/div>\n\n\n\n<p class=\"is-style-text-annotation is-style-text-annotation--3\">1 day per 360 degrees = 24 \u00d7 60 \u00d7 60 \/ 360 = 240 seconds per degree.<\/p>\n\n\n\n<p>Sun rise can be found by:<\/p>\n\n\n\n<div class=\"wp-block-mathml-mathmlblock\">\\(SunRise = SolarNoon &#8211; RiseSet[seconds] \\)<\/div>\n\n\n\n<p>and sun set:<\/p>\n\n\n\n<div class=\"wp-block-mathml-mathmlblock\">\\(SunSet = SolarNoon + RiseSet[seconds] \\)<\/div>\n\n\n\n<p>R download:&nbsp;<a href=\"https:\/\/pcool.dyndns.org:\/wp-content\/R_functions\/sun_rise_formula.txt\" target=\"_blank\" rel=\"noreferrer noopener\">sun_rise_formula<\/a><\/p>\n\n\n\n<p><strong>Graphical presentation<\/strong><\/p>\n\n\n\n<p>To allow visualisation in R, the&nbsp;following packages should be<a href=\"https:\/\/pcool.dyndns.org\/index.php\/packages\/\"> installed as described<\/a>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>dplyR package<sup class='sup-ref-note' id='note-zotero-ref-p2329-r1-o1'><a class='sup-ref-note' href='#zotero-ref-p2329-r1'>1<\/a><\/sup><em>, to manipulate data frames<\/em><\/li>\n\n\n\n<li>ggplot2 package<sup class='sup-ref-note' id='note-zotero-ref-p2329-r2-o1'><a class='sup-ref-note' href='#zotero-ref-p2329-r2'>2<\/a><\/sup><em>, to create plots<\/em><\/li>\n\n\n\n<li>lubridate package<sup class='sup-ref-note' id='note-zotero-ref-p2329-r3-o1'><a class='sup-ref-note' href='#zotero-ref-p2329-r3'>3<\/a><\/sup><em>, to work with dates<\/em><\/li>\n<\/ul>\n\n\n\n<p>The&nbsp;following functions, as described above, should be copied and pasted into R&nbsp;and executed <a href=\"https:\/\/pcool.dyndns.org\/index.php\/functions\/\">as described<\/a>:<\/p>\n\n\n\n<p><a href=\"https:\/\/pcool.dyndns.org:\/wp-content\/R_functions\/convert_dd_dms.txt\" target=\"_blank\" rel=\"noreferrer noopener\">convert_dd_dms<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/pcool.dyndns.org:\/wp-content\/R_functions\/convert_dms_dd.txt\" target=\"_blank\" rel=\"noreferrer noopener\">convert_dms_dd<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/pcool.dyndns.org:\/wp-content\/R_functions\/equation_of_time.txt\" target=\"_blank\" rel=\"noreferrer noopener\">equation_of_time<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/pcool.dyndns.org:\/wp-content\/R_functions\/sun_declination.txt\" target=\"_blank\" rel=\"noreferrer noopener\">sun_declination<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/pcool.dyndns.org:\/wp-content\/R_functions\/sun_rise_formula.txt\" target=\"_blank\" rel=\"noreferrer noopener\">sun_rise_formula<\/a><\/p>\n\n\n\n<p><strong>Location<\/strong><\/p>\n\n\n\n<p>As example the location is set at<a href=\"https:\/\/www.rjah.nhs.uk\/\" target=\"_blank\" rel=\"noopener\"> the Robert Jones and Agnes Hunt Orthopaedic Hospital NHS Foundation Trust<\/a>. The coordinates are (DMS):<\/p>\n\n\n\n<p>Longitude: 3 degrees, 1 minute and 57.8 seconds West<\/p>\n\n\n\n<p>Latitude: 52 degrees, 53 minutes and 3.7 seconds North<\/p>\n\n\n\n<p>To convert to DD and show the result (North and East are +, South and West are -):<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><span style=\"color: #ff0000;\"><em>library(dplyr)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>library(ggplot2)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>library(lubridate)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>convert_dms_dd &lt;- function(deg, min, sec){<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>result &lt;- deg + min \/ 60 + sec \/ 3600<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>}<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>longitude &lt;- convert_dms_dd(3, 1, 57.8)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em># East is negative, so make negative:<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>longitude &lt;- - longitude<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>latitude &lt;- convert_dms_dd(52, 53, 3.7)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em># show the values:<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>longitude<\/em><\/span>\n<span style=\"color: #0000ff;\"><em>&#091;1] -3.032722<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>latitude<\/em><\/span>\n<span style=\"color: #0000ff;\"><em>&#091;1] 52.88436<\/em><\/span><\/code><\/pre>\n\n\n\n<p>Create a vector of day numbers:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><span style=\"color: #ff0000;\"><em>days &lt;- rep(1:365, by = 1)<\/em><\/span><br><br><\/code><\/pre>\n\n\n\n<p>Load the formulas defined above:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><span style=\"color: #ff0000;\"><em>sun_rise_formula &lt;- function(day_number, declination, latitude, s){<\/em><\/span>\n<span style=\"color: #ff0000;\"><em># altitude correction needed; otherwise centre of the sun disk.<\/em><\/span>\n<span style=\"color: #ff0000;\"><em># - 16 arc minutes for semi-diameter of the sun disk<\/em><\/span>\n<span style=\"color: #ff0000;\"><em># horizontal refraction: - 34 arc minutes<\/em><\/span>\n<span style=\"color: #ff0000;\"><em># total - 50 arc minutes = - 50 \/ 60 deg <\/em><\/span>\n<span style=\"color: #ff0000;\"><em>altitude_rad &lt;- - 50 \/ 60 * pi \/ 180 + s * pi \/ 180<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>latitude_rad &lt;- latitude * pi \/ 180<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>declination_rad &lt;- declination * pi \/ 180<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>w &lt;- (sin(altitude_rad) - (sin(latitude_rad) * sin(declination_rad))) \/ <\/em><\/span>\n<span style=\"color: #ff0000;\"><em>(cos(latitude_rad) * cos(declination_rad))<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>hour_angle_rad &lt;- acos(w)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>hour_angle &lt;- hour_angle_rad * 180 \/ pi<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>rise_set_seconds &lt;- hour_angle * 240<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>result &lt;- rise_set_seconds<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>}<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>sun_declination &lt;- function(day_number){<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>result &lt;- 23.45 * sin(2 * pi \/ 365 * (day_number - 81))<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>}<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>equation_of_time &lt;- function(day_number){<\/em><\/span>\n<span style=\"color: #ff0000;\"><em># day_number is the number of the day in the year<\/em><\/span>\n<span style=\"color: #ff0000;\"><em># 81 is the 22nd March<\/em><\/span>\n<span style=\"color: #ff0000;\"><em># B in radians<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>B &lt;- 2 * pi * (day_number - 81) \/ 365 <\/em><\/span>\n<span style=\"color: #ff0000;\"><em># correction in minutes<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>result &lt;- 9.87 * sin(2 * B) - 7.53 * cos(B) - 1.5 * sin(B)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em># correction in seconds <\/em><\/span>\n<span style=\"color: #ff0000;\"><em>result &lt;- result * 60<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>}<\/em><\/span><\/code><\/pre>\n\n\n\n<p>Calculate the correction (equation of time), the solar declination and the time of sun rise \/ sun set before \/ after solar noon:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><em><span style=\"color: #ff0000;\">correction &lt;- equation_of_time(day_number = days)<\/span><\/em>\n<em><span style=\"color: #ff0000;\">declination &lt;- sun_declination(day_number = days)<\/span><\/em>\n<em><span style=\"color: #ff0000;\">rise_set_seconds &lt;- sun_rise_formula(day_number = days, declination = declination, latitude = latitude, s = 0)<\/span><\/em><\/code><\/pre>\n\n\n\n<p>Convert to a data frame (called solar_time):<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><span style=\"color: #ff0000;\"><em>solar_time &lt;- data.frame(\"day\" = days, \"correction\" = correction, \"declination\" = declination, \"rise_set\" = rise_set_seconds)<\/em><\/span><\/code><\/pre>\n\n\n\n<p>Calculate the solar altitude from the solar declination and add to the data frame:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><em><span style=\"color: #ff0000;\">solar_time$altitude &lt;- 90 - latitude + solar_time$declination<\/span><\/em><\/code><\/pre>\n\n\n\n<p>Add the longitude correction and the total time correction (longitude and equation of time) to the data frame:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><span style=\"color: #ff0000;\"><em>solar_time$longitude_correction &lt;- longitude * 240&nbsp;<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>solar_time$total_correction &lt;- solar_time$longitude_correction + solar_time$correction <\/em><\/span><\/code><\/pre>\n\n\n\n<p>Also add the start time of the day and the time of chronological noon to the data frame:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><em><span style=\"color: #ff0000;\">solar_time$start &lt;- ymd_hms(\"2017-12-31 00:00:00\", tz = \"GMT\") + <\/span><\/em>\n  <em><span style=\"color: #ff0000;\">ddays(solar_time$day)<\/span><\/em>\n<em><span style=\"color: #ff0000;\">solar_time$noon &lt;- ymd_hms(\"2017-12-31 12:00:00\", tz = \"GMT\") + <\/span><\/em>\n  <em><span style=\"color: #ff0000;\">ddays(solar_time$day)<\/span><\/em><\/code><\/pre>\n\n\n\n<p>Calculate apparent solar noon (as seen on a sun dial) and add to the data frame:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><span style=\"color: #ff0000;\"><em>solar_time$noon_apparent &lt;- solar_time$noon - <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>dseconds(solar_time$total_correction)&nbsp;<\/em><\/span><\/code><\/pre>\n\n\n\n<p>Calculate sun set, sun rise and the total day length and add to the data frame:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><span style=\"color: #ff0000;\"><em>solar_time$sun_rise &lt;- solar_time$noon_apparent - dseconds(solar_time$rise_set) <\/em><\/span>\n<span style=\"color: #ff0000;\"><em>solar_time$sun_set &lt;- solar_time$noon_apparent + dseconds(solar_time$rise_set) <\/em><\/span>\n<span style=\"color: #ff0000;\"><em>solar_time$day_length &lt;- solar_time$sun_set - solar_time$sun_rise<\/em><\/span><\/code><\/pre>\n\n\n\n<p>Similarly, calculate the timings of civil, nautical and astronomical twilight and add to the data frame:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><span style=\"color: #ff0000;\"><em># add civil twilight s = - 6<\/em><\/span>\n<span style=\"color: #ff0000;\"><em># add nautical twilight s = - 12<\/em><\/span>\n<span style=\"color: #ff0000;\"><em># add astronomical twilight, s = - 18<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>solar_time$civil_seconds &lt;- sun_rise_formula(day_number = days, <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>declination = declination, latitude = latitude, s = - 6)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>solar_time$nautical_seconds &lt;- sun_rise_formula(day_number = days, <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>declination = declination, latitude = latitude, s = - 12)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>solar_time$astro_seconds &lt;- sun_rise_formula(day_number = days, <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>declination = declination, latitude = latitude, s = - 18)<\/em><\/span>\n<span style=\"color: #0000ff;\"><em>Warning message:<\/em><\/span>\n<span style=\"color: #0000ff;\"><em>In acos(w) : NaNs produced<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>solar_time$civil_rise &lt;- solar_time$noon_apparent - <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>dseconds(solar_time$civil_seconds)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>solar_time$civil_set &lt;- solar_time$noon_apparent + <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>dseconds(solar_time$civil_seconds)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>solar_time$nautical_rise &lt;- solar_time$noon_apparent - <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>dseconds(solar_time$nautical_seconds)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>solar_time$nautical_set &lt;- solar_time$noon_apparent + <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>dseconds(solar_time$nautical_seconds)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>solar_time$astro_rise &lt;- solar_time$noon_apparent - <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>dseconds(solar_time$astro_seconds)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>solar_time$astro_set &lt;- solar_time$noon_apparent + <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>dseconds(solar_time$astro_seconds)<\/em><\/span><\/code><\/pre>\n\n\n\n<p class=\"is-style-text-annotation is-style-text-annotation--4\">The warning message shows that NaNs are introduced when there is no astronomical twilight in the height of summer.<\/p>\n\n\n\n<p>The data frame is now complete and can be&nbsp;reviewed with:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><em><span style=\"color: #ff0000;\">str(solar_time)<\/span><\/em>\n<em><span style=\"color: #ff0000;\">head(solar_time)<\/span><\/em>\n<em><span style=\"color: #ff0000;\">tail(solar_time)<\/span><\/em>\n<em><span style=\"color: #ff0000;\">solar_time<\/span><\/em><\/code><\/pre>\n\n\n\n<p class=\"is-style-text-annotation is-style-text-annotation--5\"><em>Output omitted for brevity.<\/em><\/p>\n\n\n\n<p>Retrieve the following from the data frame and define them for later use:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>earliest sun rise<\/li>\n\n\n\n<li>latest sun rise<\/li>\n\n\n\n<li>earliest sun set<\/li>\n\n\n\n<li>latest sun set<\/li>\n\n\n\n<li class=\"has-large-font-size\">shortest day<\/li>\n\n\n\n<li>longest day<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#f5021b\" class=\"has-inline-color\">earliest_sun_rise &lt;- solar_time %&gt;%\n  dplyr::mutate(sun_rise_hour = hour(sun_rise) +   <\/mark><\/em>\n  <em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#f5021b\" class=\"has-inline-color\">minute(sun_rise) \/ 60 + second(sun_rise) \/ 3600) %&gt;%\n  dplyr::filter(sun_rise_hour == min(sun_rise_hour))\n\nlatest_sun_rise &lt;- solar_time %&gt;%\n  dplyr::mutate(sun_rise_hour = hour(sun_rise) +   <\/mark><\/em>\n  <em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#f5021b\" class=\"has-inline-color\">minute(sun_rise) \/ 60 + second(sun_rise) \/ 3600) %&gt;%\n  dplyr::filter(sun_rise_hour == max(sun_rise_hour))\n\nearliest_sun_set &lt;- solar_time %&gt;%\n  dplyr::mutate(sun_set_hour = hour(sun_set) + <\/mark><\/em>\n  <em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#f5021b\" class=\"has-inline-color\">minute(sun_set) \/ 60 + second(sun_set) \/ 3600) %&gt;%\n  dplyr::filter(sun_set_hour == min(sun_set_hour))\n\nlatest_sun_set &lt;- solar_time %&gt;%\n  dplyr::mutate(sun_set_hour = hour(sun_set) + <\/mark><\/em>\n  <em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#f5021b\" class=\"has-inline-color\">minute(sun_set) \/ 60 + second(sun_set) \/ 3600) %&gt;%\n  dplyr::filter(sun_set_hour == max(sun_set_hour))\n\nshortest_day &lt;- solar_time %&gt;%\n<\/mark><\/em>  <em><mark style=\"background-color:rgba(0, 0, 0, 0);color:#f5021b\" class=\"has-inline-color\">dplyr::filter(day_length == min(day_length))\n\nlongest_day &lt;- solar_time %&gt;%\n  dplyr::filter(day_length == max(day_length))<\/mark><\/em>\n\n<span style=\"color: #ff0000;\"><em>earliest_sun_rise<\/em><\/span>\n<span style=\"color: #000000;\">day 168, 17\/06<\/span>\n<span style=\"color: #ff0000;\"><em>latest_sun_rise<\/em><\/span>\nday 364, 30\/12\n<span style=\"color: #ff0000;\"><em>earliest_sun_set<\/em><\/span>\nday 346, 12\/12\n<span style=\"color: #ff0000;\"><em>latest_sun_set<\/em><\/span>\nday 176, 25\/6\n<span style=\"color: #ff0000;\"><em>shortest_day<\/em><\/span>\nday 355, 21\/12\n<span style=\"color: #ff0000;\"><em>longest_day<\/em><\/span>\nday 172, 21\/06<\/code><\/pre>\n\n\n\n<p class=\"is-style-text-annotation is-style-text-annotation--6\"><em>Output omitted, but summarised for readability.<\/em><\/p>\n\n\n\n<p>Although the longest day is 21st June, the earliest sun rise is a few days earlier (17th June) and the latest sun set a few days later ((25th June). Similarly, around the shortest day (21st December) the latest sun rise is a few days later (30th of December) and the earliest sun set a few days earlier (12th December). This is better shown graphically in a plot that follows later.<\/p>\n\n\n\n<p><strong>Equation of time<\/strong><\/p>\n\n\n\n<p>It is now straight forward to plot the equation of time with ggplot2<sup class='sup-ref-note' id='note-zotero-ref-p2329-r4-o1'><a class='sup-ref-note' href='#zotero-ref-p2329-r4'>4<\/a><\/sup>:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><span style=\"color: #ff0000;\"><em>dev.new()<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>solar_time %&gt;%<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>ggplot(aes(x = day, y = correction)) +<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>geom_line(colour = \"blue\") +<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>scale_x_continuous(\"Day Number\") +<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>scale_y_continuous(\"Correction &#091;seconds]\") +<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>ggtitle(\"Equation of Time\") +<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>theme_bw() <\/em><\/span><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"693\" src=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/equation_of_time_1-1024x693.png\" alt=\"\" class=\"wp-image-3137\" srcset=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/equation_of_time_1-1024x693.png 1024w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/equation_of_time_1-300x203.png 300w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/equation_of_time_1-768x520.png 768w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/equation_of_time_1-1536x1039.png 1536w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/equation_of_time_1-2048x1386.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Or add the current day to the plot:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><span style=\"color: #ff0000;\"><em>dev.new()<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>solar_time %&gt;%<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>ggplot(aes(x = day, y = correction)) +<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>geom_line(colour = \"blue\") +<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>geom_point(data = subset(solar_time, solar_time$day == yday(now(tzone = \"GMT\"))), aes(x = day, y = correction), colour = \"black\") +<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>geom_text(data = subset(solar_time, solar_time$day == yday(now(tzone = \"GMT\"))), aes(x = day, y = correction), label = today(), hjust = 1.1) +<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>scale_x_continuous(\"Day Number\") +<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>scale_y_continuous(\"Correction &#091;seconds]\") +<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>ggtitle(\"Equation of Time\") +<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>theme_bw() <\/em><\/span><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"699\" src=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/equation_of_time_2-1024x699.png\" alt=\"\" class=\"wp-image-3142\" srcset=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/equation_of_time_2-1024x699.png 1024w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/equation_of_time_2-300x205.png 300w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/equation_of_time_2-768x524.png 768w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/equation_of_time_2-1536x1048.png 1536w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/equation_of_time_2-2048x1398.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>To show a plot of the sun rise in red, sun set in orange and day length in green:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><span style=\"color: #ff0000;\"><em>dev.new()<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>solar_time %&gt;%<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>ggplot() +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_line(aes(x = day, y = (sun_rise - start)), colour = \"red\") +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_line(aes(x = day, y = (sun_set - start)), colour = \"orange\") +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_line(aes(x = day, y = day_length), colour = 'darkgreen') +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_vline(xintercept = longest_day$day, colour = \"darkgreen\") +<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>  geom_vline(xintercept = shortest_day$day, colour = \"darkgreen\") +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_vline(xintercept = earliest_sun_rise$day, colour = \"red\",  <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>linetype = 2) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_vline(xintercept = latest_sun_rise$day, colour = \"red\", <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>linetype = 2) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_vline(xintercept = earliest_sun_set$day, colour = \"orange\", <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>linetype = 2) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_vline(xintercept = latest_sun_set$day, colour = \"orange\", <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>linetype = 2) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>ggtitle(\"Sun Rise (red), Sun Set (orange) and Day Length (green)\") +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>scale_x_continuous(\"Day Number\", breaks = c(1, 100, <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>latest_sun_set$day, longest_day$day, earliest_sun_rise$day, 200, <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>300, latest_sun_rise$day, shortest_day$day, earliest_sun_set$day), <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>limits = c(0, 385)) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_text(data = latest_sun_set, aes(x = day, y = 10, label = <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>date(start)), colour = \"orange\", hjust = - 0.1) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_text(data = earliest_sun_rise, aes(x = day, y = 10, label = <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>date(start)), colour = \"red\", hjust = 1.1) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_text(data = earliest_sun_set, aes(x = day, y = 10, label = <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>date(start)), colour = \"orange\", hjust = 1.1) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_text(data = latest_sun_rise, aes(x = day, y = 10, label = <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>date(start)), colour = \"red\", hjust = - 0.1) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_text(data = longest_day, aes(x = day, y = 17.5 , label = <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>date(start)), colour = \"darkgreen\", hjust = - 0.1) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_text(data = shortest_day, aes(x = day, y = 17.5, label = <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>date(start)), colour = \"darkgreen\", hjust = - 0.1) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>scale_y_continuous(\"Hours after Midnight\") +<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>  theme_bw() +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>theme(axis.text.x=element_text(angle = 90, hjust = 0, vjust = 0)) # after theme_bw call otherwise it doesnt' work!<\/em><\/span><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"577\" src=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/day_length-1024x577.png\" alt=\"\" class=\"wp-image-3098\" srcset=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/day_length-1024x577.png 1024w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/day_length-300x169.png 300w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/day_length-768x432.png 768w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/day_length-1536x865.png 1536w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/day_length-2048x1153.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>An analemna, shows the position of the sun in the sky every day at midday (chronological noon):<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><span style=\"color: #ff0000;\"><em>dev.new()<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>solar_time %&gt;%<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>ggplot(aes(x = correction, y = declination)) +<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>geom_point(colour = \"orange\") + <\/em><\/span>\n<span style=\"color: #ff0000;\"><em>scale_x_continuous(\"Correction &#091;seconds]\") +<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>scale_y_continuous(\"Declination &#091;degrees]\") + <\/em><\/span>\n<span style=\"color: #ff0000;\"><em>ggtitle(\"Analemna - Solar Declination\") +<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>theme_bw()<\/em><\/span><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"874\" src=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_1-1024x874.png\" alt=\"\" class=\"wp-image-2774\" srcset=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_1-1024x874.png 1024w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_1-300x256.png 300w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_1-768x655.png 768w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_1-1536x1311.png 1536w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_1.png 1608w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Annotate&nbsp;different days on the plot:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><em><span style=\"color: #ff0000;\">dev.new()<\/span><\/em>\n<em><span style=\"color: #ff0000;\">solar_time %&gt;%<\/span><\/em>\n  <em><span style=\"color: #ff0000;\">ggplot(aes(x = correction, y = declination)) +<\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_point(colour = \"grey\") + <\/span><\/em>\n  <em><span style=\"color: #ff0000;\">scale_x_continuous(\"Correction &#091;seconds]\") +<\/span><\/em>\n  <em><span style=\"color: #ff0000;\">scale_y_continuous(\"Declination &#091;degrees]\", limits = c(-25, 25)) + <\/span><\/em>\n  <em><span style=\"color: #ff0000;\">ggtitle(\"Analemna - Solar Declination\") +<\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_text(data = longest_day, aes(x = correction, y = declination, <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">label = day), colour = \"darkgreen\", vjust = - 1) +<\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_point(data = longest_day, aes(x = correction, y = declination), <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">colour = \"darkgreen\") + <\/span><\/em>\n<em><span style=\"color: #ff0000;\">  geom_text(data = shortest_day, aes(x = correction, y = declination, <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">label = day), colour = \"darkgreen\", vjust = 2) +<\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_point(data = shortest_day, aes(x = correction, <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">y =<\/span><\/em> <em><span style=\"color: #ff0000;\">declination), colour = \"darkgreen\") + <\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_text(data = latest_sun_set, aes(x = correction, <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">y = declination, label = day), colour = \"orange\", hjust = 0.7, <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">vjust = 2) +<\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_point(data = latest_sun_set, aes(x = correction, <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">y = declination), colour = \"orange\") + <\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_text(data = latest_sun_rise, aes(x = correction, <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">y = declination, label = day), colour = \"red\", hjust = 0.5, <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">vjust = 2) +<\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_point(data = latest_sun_rise, aes(x = correction, <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">y = declination), colour = \"red\") + <\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_text(data = earliest_sun_set, aes(x = correction, <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">y = declination, label = day), colour = \"orange\", vjust = 2) +<\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_point(data = earliest_sun_set, aes(x = correction, <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">y = declination), colour = \"orange\") + <\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_text(data = earliest_sun_rise, aes(x = correction, <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">y = declination, label = day), colour = \"red\", hjust = 0.1 , <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">vjust = 2) +<\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_point(data = earliest_sun_rise, aes(x = correction, <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">y = declination), colour = \"red\") + <\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_point(data = subset(solar_time, solar_time$day == 104), <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">aes(x = correction, y = declination), colour = \"black\") + <\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_text(data = subset(solar_time, solar_time$day == 104), <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">aes(x = correction, y = declination, label = day), <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">hjust = 0, vjust = 2) +<\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_point(data = subset(solar_time, solar_time$day == 241), <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">aes(x = correction, y = declination), colour = \"black\") + <\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_text(data = subset(solar_time, solar_time$day == 241), <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">aes(x = correction, y = declination, label = day), <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">hjust = 0.2, vjust = -1) +<\/span><\/em>\n  <em><span style=\"color: #ff0000;\"># add equinox in blue, table shows equinox on <\/span><\/em>\n  <em><span style=\"color: #ff0000;\">#<\/span><\/em> <em><span style=\"color: #ff0000;\">20th March: day 79 and 23rd September day 266<\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_text(data = subset(solar_time, solar_time$day == 79), <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">aes(x = correction, y = declination, label = day), <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">colour = \"blue\", hjust<\/span><\/em> <em><span style=\"color: #ff0000;\">= - 0.3, vjust = 1) + <\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_point(data = subset(solar_time, solar_time$day == 79), <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">aes(x = correction, y = declination), colour = \"blue\") + <\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_text(data = subset(solar_time, solar_time$day == 266), <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">aes(x = correction, y = declination, label = day), <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">colour = \"blue\", hjust = - 0.2, vjust = 0) +<\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_point(data = subset(solar_time, solar_time$day == 266), <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">aes(x =<\/span><\/em> <em><span style=\"color: #ff0000;\">correction, y = declination), colour = \"blue\") + <\/span><\/em>\n  <em><span style=\"color: #ff0000;\"># add the extreme corrections:<\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_point(data = subset(solar_time, solar_time$day == 44), <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">aes(x = correction, y = declination), colour = \"salmon\") + <\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_text(data = subset(solar_time, solar_time$day == 44), <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">aes(x = correction, y = declination, label = day), <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">colour = \"salmon\", hjust = - 0.5, vjust = 0) +<\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_point(data = subset(solar_time, solar_time$day == 303), <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">aes(x = correction, y = declination), colour = \"salmon\") + <\/span><\/em>\n  <em><span style=\"color: #ff0000;\">geom_text(data = subset(solar_time, solar_time$day == 303), <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">aes(x = correction, y = declination, label = day), <\/span><\/em>\n    <em><span style=\"color: #ff0000;\">colour = \"salmon\", hjust = 1.4, vjust = 0) +<\/span><\/em>\n  <em><span style=\"color: #ff0000;\">theme_bw()<\/span><\/em><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"658\" src=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_2-1024x658.png\" alt=\"\" class=\"wp-image-2779\" srcset=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_2-1024x658.png 1024w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_2-300x193.png 300w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_2-768x493.png 768w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_2-1536x987.png 1536w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_2-2048x1315.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>The plot is easier to read with text:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><span style=\"color: #ff0000;\"><em>dev.new()<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>solar_time %&gt;%<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>ggplot(aes(x = correction, y = declination)) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_point(colour = \"grey\") + <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>scale_x_continuous(\"Correction &#091;seconds]\") +<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>  scale_y_continuous(\"Declination &#091;degrees]\", limits = c(- 30, 30)) + <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>ggtitle(\"Analemna - Solar Declination\") +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_text(data = longest_day, aes(x = correction, y = declination), <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>colour = \"darkgreen\", label = \"longest\\nday\", vjust = - 0.5) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_point(data = longest_day, aes(x = correction, y = declination), <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>colour = \"darkgreen\") + <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_text(data = shortest_day, aes(x = correction, y = declination), <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>colour = \"darkgreen\", label = \"shortest\\nday\", vjust = 1.5) +<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>  geom_point(data = shortest_day, aes(x = correction, <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>y = declination), colour = \"darkgreen\") + <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_text(data = latest_sun_set, aes(x = correction, <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>y = declination), colour = \"orange\", label = \"latest\\nsun set\", <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>hjust = 0.7, vjust = 1.5) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_point(data = latest_sun_set, aes(x = correction, <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>y = declination), colour = \"orange\") + <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_text(data = latest_sun_rise, aes(x = correction, <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>y = declination), colour = \"red\", label = \"latest\\nsun rise\", <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>hjust = 0.5, vjust = 1.5) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_point(data = latest_sun_rise, aes(x = correction, <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>y = declination), colour = \"red\") + <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_text(data = earliest_sun_set, aes(x = correction, <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>y = declination, label = day), colour = \"orange\", <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>label = \"earliest\\nsun set\", vjust = 1.5) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_point(data = earliest_sun_set, aes(x = correction, <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>y = declination), colour = \"orange\") + <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_text(data = earliest_sun_rise, aes(x = correction, <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>y = declination), colour = \"red\", label = \"earliest\\nsun rise\", <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>hjust = 0.1 , vjust = 1.5) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_point(data = earliest_sun_rise, aes(x = correction, <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>y = declination), colour = \"red\") + <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_text(data = subset(solar_time, solar_time$day == 79), <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>aes(x = correction, y = declination), colour = \"blue\", <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>label = \"vernal equinox\", hjust = - 0.1, vjust = 1) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_point(data = subset(solar_time, solar_time$day == 79), <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>aes(x = correction, y = declination), colour = \"blue\") + <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_text(data = subset(solar_time, solar_time$day == 266), <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>aes(x = correction, y = declination), colour = \"blue\", <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>label = \"autumnal equinox\", hjust = - 0.1, vjust = 0) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_point(data = subset(solar_time, solar_time$day == 266), <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>aes(x = correction, y = declination), colour = \"blue\") + <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>theme_bw() <\/em><\/span><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_3-1024x683.png\" alt=\"\" class=\"wp-image-2784\" srcset=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_3-1024x683.png 1024w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_3-300x200.png 300w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_3-768x512.png 768w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_3-1536x1025.png 1536w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_3-2048x1367.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Rather than the solar declination, plot the solar altitude of the location (RJAH Hospital) on the y-axis and indicate the current day with the timing of solar noon:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><span style=\"color: #ff0000;\"><em>dev.new()<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>solar_time %&gt;%<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>ggplot(aes(x = total_correction \/ 60, y = altitude)) + <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em># correction in mintues<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_point(colour = \"red\", alpha = 0.3) + <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>scale_x_continuous(\"Correction &#091;minutes]\") +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>scale_y_continuous(\"Altitude &#091;degrees]\") + <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>ggtitle(\"Alanemna\\nSolar Altitude at RJAH Hospital\") +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_text(data = subset(solar_time, <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>solar_time$day == yday(now(tzone = \"GMT\"))), <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>aes(x = total_correction \/ 60, y = altitude, <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>label = noon_apparent), hjust = 1, vjust = - 0.5) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_point(data = subset(solar_time, <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>solar_time$day == yday(now(tzone = \"GMT\"))), <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>aes(x = total_correction \/ 60, y = altitude), colour = \"black\") + <\/em><\/span>\n<span style=\"color: #ff0000;\"><em>theme_bw() <\/em><\/span><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"666\" src=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_4-1024x666.png\" alt=\"\" class=\"wp-image-2789\" srcset=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_4-1024x666.png 1024w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_4-300x195.png 300w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_4-768x500.png 768w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_4-1536x999.png 1536w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/analemna_4-2048x1332.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>To show the timings of the different twilights (civil, nautical and astronomical):<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><span style=\"color: #ff0000;\"><em>dev.new()<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>solar_time %&gt;%<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>ggplot() +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_line(aes(x = day, y = (sun_rise - start)), colour = \"red\") +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_line(aes(x = day, y = (sun_set - start)), colour = \"orange\") +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em># geom_line(aes(x = day, y = day_length), colour = 'darkgreen') +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_line(aes(x = day, y = (astro_rise - start) \/ 60), <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>colour = \"darkblue\") + # gives difference in minutes<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_line(aes(x = day, y = (astro_set - start)), <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>colour = \"darkblue\") +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_line(aes(x = day, y = (nautical_rise - start)), <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>colour = \"blue\") +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_line(aes(x = day, y = (nautical_set - start)), <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>colour = \"blue\") +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_line(aes(x = day, y = (civil_rise - start)), <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>colour = \"steelblue\") +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_line(aes(x = day, y = (civil_set - start)), <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>colour = \"steelblue\") +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em># add longest \/ shortest day earliest \/ latest sunrise \/ sunset<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_vline(xintercept = longest_day$day, colour = \"darkgreen\") +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_vline(xintercept = shortest_day$day, colour = \"darkgreen\") +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_vline(xintercept = earliest_sun_rise$day, colour = \"red\", <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>linetype = 2) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_vline(xintercept = latest_sun_rise$day, colour = \"red\", <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>linetype = 2) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_vline(xintercept = earliest_sun_set$day, colour = \"orange\", <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>linetype = 2) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_vline(xintercept = latest_sun_set$day, colour = \"orange\", <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>linetype = 2) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em># equinoxes<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>  geom_vline(xintercept = 79, colour = \"blue\", linetype = 3) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_vline(xintercept = 266, colour = \"blue\", linetype = 3) + <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em># astro twilight limits<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_vline(xintercept = 132, colour = \"darkblue\", linetype = 2) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>geom_vline(xintercept = 212, colour = \"darkblue\", linetype = 2) + <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>scale_x_continuous(\"Day Number\", limits = c(0, 375), breaks = c()) +<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>  scale_x_continuous(\"Day Number\", breaks = c(1, 79, 132, 212, 266, <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>latest_sun_set$day, longest_day$day, <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>earliest_sun_rise$day,&nbsp;latest_sun_rise$day, shortest_day$day, <\/em><\/span>\n    <span style=\"color: #ff0000;\"><em>earliest_sun_set$day), limits = c(0, 375)) +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>scale_y_continuous(\"Hours after Midnight\") +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>ggtitle(\"Civil, Nautical and Astronomical Twilight\") +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>theme_bw() +<\/em><\/span>\n  <span style=\"color: #ff0000;\"><em>theme(axis.text.x=element_text(angle = 90, hjust = 0, vjust = 0)) <\/em><\/span>\n  <span style=\"color: #ff0000;\"><em># after theme_bw call otherwise it doesnt' work!<\/em><\/span>\n<span style=\"color: #0000ff;\"><em>Scale for 'x' is already present. Adding another scale for 'x', which will replace the existing&nbsp;scale.<\/em><\/span><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"544\" src=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/twilight-1024x544.png\" alt=\"\" class=\"wp-image-3862\" srcset=\"https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/twilight-1024x544.png 1024w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/twilight-300x159.png 300w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/twilight-768x408.png 768w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/twilight-1536x816.png 1536w, https:\/\/pcool.dyndns.org\/wp-content\/uploads\/2025\/06\/twilight-2048x1088.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>It is, of course, also possible to calculate the solar time from the computer time and estimate the timing of apparent solar noon:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code><span style=\"color: #ff0000;\"><em>###### calculate solar time based on computer time.<\/em><\/span>\n<span style=\"color: #ff0000;\"><em># use GMT, ignore British Summer Time<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>computer_time &lt;- now(tzone = \"GMT\")<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>year_day &lt;- yday(computer_time)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>correction_today &lt;- equation_of_time(year_day) + longitude * 240 <\/em><\/span>\n<span style=\"color: #ff0000;\"><em>solar_time_today &lt;- computer_time - correction_today <\/em><\/span>\n<span style=\"color: #ff0000;\"><em>mean_solar_noon_today &lt;- today() + dhours(12)<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>tz(mean_solar_noon_today) &lt;- \"GMT\"<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>apparent_solar_noon_today &lt;- mean_solar_noon_today - correction_today<\/em><\/span>\n\n<span style=\"color: #ff0000;\"><em>computer_time<\/em><\/span>\n<span style=\"color: #0000ff;\"><em>&#091;1] \"2018-04-13 15:37:41 GMT\"<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>year_day<\/em><\/span>\n<span style=\"color: #0000ff;\"><em>&#091;1] 103<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>correction_today<\/em><\/span>\n<span style=\"color: #0000ff;\"><em>&#091;1] -774.042<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>solar_time_today<\/em><\/span>\n<span style=\"color: #0000ff;\"><em>&#091;1] \"2018-04-13 15:50:35 GMT\"<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>mean_solar_noon_today<\/em><\/span>\n<span style=\"color: #0000ff;\"><em>&#091;1] \"2018-04-13 12:00:00 GMT\"<\/em><\/span>\n<span style=\"color: #ff0000;\"><em>apparent_solar_noon_today<\/em><\/span>\n<span style=\"color: #0000ff;\"><em>&#091;1] \"2018-04-13 12:12:54 GMT\"<\/em><\/span><\/code><\/pre>\n\n\n\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Noon is 12 o&#8217;clock at daytime. However, the chronological time does not coincide with solar noon, when the sun reaches its highest point in the sky. This is due to three factors: In this section, daylight savings are not taken into consideration. But the other factors are explored to calculate the time of local [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-2329","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/pcool.dyndns.org\/index.php\/wp-json\/wp\/v2\/pages\/2329","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pcool.dyndns.org\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/pcool.dyndns.org\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/pcool.dyndns.org\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/pcool.dyndns.org\/index.php\/wp-json\/wp\/v2\/comments?post=2329"}],"version-history":[{"count":20,"href":"https:\/\/pcool.dyndns.org\/index.php\/wp-json\/wp\/v2\/pages\/2329\/revisions"}],"predecessor-version":[{"id":4625,"href":"https:\/\/pcool.dyndns.org\/index.php\/wp-json\/wp\/v2\/pages\/2329\/revisions\/4625"}],"wp:attachment":[{"href":"https:\/\/pcool.dyndns.org\/index.php\/wp-json\/wp\/v2\/media?parent=2329"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}