1

This technique should be similar or the same as on Ubuntu; though the following code does not work on the router. One method is the following:

dateFromServer=$(curl -v --silent https://google.com/ 2>&1 \
 | grep Date | sed -e 's/< Date: //')
date +"%d%m%Y%H%M%S" -d "$dateFromServer"

The result is

'ate: invalid date 'Sat, 12 May 2018 18:49:18 GMT

or Get the date from a HTTP response header. Remove clutter. Set the date.

date -s `curl -I 'https://startpage.com/' 2>/dev/null | grep -i '^date:' | sed 's/^[Dd]ate: //g'`

The results I get are as follows:

@Heyzeus:/tmp/home/root# date -s `curl -I 'https://google.com/' 2>/dev/null | grep -i '^date:' | sed 's/^[Dd]ate: //g'` BusyBox v1.25.1 (2018-05-06 13:19:15 EDT) multi-call binary.

Usage: date [OPTIONS] [+FMT] [TIME]

Display time (using +FMT), or set time

[-s,--set] TIME Set time to TIME
-u,--utc Work in UTC (don't convert to local time)
-R,--rfc-2822 Output RFC-2822 compliant date string
-I[SPEC] Output ISO-8601 compliant date string SPEC='date' (default) for date only, 'hours', 'minutes', or 'seconds' for date and time to the indicated precision
-r,--reference FILE Display last modification time of FILE
-d,--date TIME Display TIME, not 'now'
-D FMT Use FMT for -d TIME conversion

Recognized TIME formats: hh:mm[:ss] [YYYY.]MM.DD-hh:mm[:ss] YYYY-MM-DD hh:mm[:ss] [[[[[YY]YY]MM]DD]hh]mm[.ss] 'date TIME' form accepts MMDDhhmm[[YY]YY][.ss] instead

Another

date -s "$(wget -qSO- --max-redirect=0 startpage.com 2>&1 | grep Date: | cut -d' ' -f5-8)"

results in: date: invalid date '13 May 2018 22:46:44'

The time extrated the first two results is for example: "Sat, 12 May 2018 18:49:18 GMT" and date -s requires something more like 2018-05-12 18:49:18 Or as listed under "recognized time formats."

Its close. But "Sat," needs to be removed, month needs replacing with a number, and then arranged properly; If this could be done exclusively in a single terminal command that would be great.

Tyler
  • 213
  • 2
  • 9
  • The last error message seems to be mangled, could you please [edit] and correct it? – dessert May 13 '18 at 06:32
  • 1
    Possible duplicate of [What is the command to update time and date from internet](https://askubuntu.com/questions/81293/what-is-the-command-to-update-time-and-date-from-internet) - Please review the [second answer](https://askubuntu.com/a/683136/566421) that is identical as your approach. – pa4080 May 13 '18 at 07:00
  • @dessert, updated! @Heyzeus/tmp/home/root# date -s "$(wget -qSO- --max-redirect=0 https://startpage.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z " results in: date: invalid date '13 May 2018 22:46:44Z'. date -s requires something more like 2018-05-12 2018 18:49:18 – Tyler May 13 '18 at 22:47
  • or rather: date -s "$(wget -qSO- --max-redirect=0 startpage.com 2>&1 | grep Date: | cut -d' ' -f5-8)" results in: date: invalid date '13 May 2018 22:46:44' – Tyler May 13 '18 at 22:53

1 Answers1

0

Thanks to Twiglets

Here is an alternative that DOES set the date !!! [-s option]. Prints out 'Date' it retrieves & the 'Date' that is set for comparison.

This works on the AsusWRT / Merlin, the only thing that is odd is that the date retrieved is ".... GMT" and the date utility sets the correct time but changes it to "... DST" Environment has TZ set to "GMT"

datetext=$(curl -I 'https://1.1.1.1/' 2>/dev/null | grep "Date:" |sed 's/Date: [A-Z][a-z][a-z], //g'| sed 's/\r//') ; echo "Date Retrieved = $datetext" ; echo -n "Date set = " ; date -s "$datetext" -D'%d %b %Y %T %Z'
Tyler
  • 213
  • 2
  • 9